xref: /dflybsd-src/sys/dev/drm/i915/intel_display.c (revision 085476612a07754b8438b2c12f80a7ee1e2a4cc7)
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/dmi.h>
28 #include <linux/module.h>
29 #include <linux/i2c.h>
30 #include <linux/kernel.h>
31 #include <drm/drm_edid.h>
32 #include <drm/drmP.h>
33 #include "intel_drv.h"
34 #include <drm/i915_drm.h>
35 #include "i915_drv.h"
36 #include "i915_trace.h"
37 #include <drm/drm_dp_helper.h>
38 #include <drm/drm_crtc_helper.h>
39 
40 #define DIV_ROUND_CLOSEST_ULL(ll, d)	\
41 	({ unsigned long long _tmp = (ll)+(d)/2; do_div(_tmp, d); _tmp; })
42 
43 static void intel_increase_pllclock(struct drm_crtc *crtc);
44 static void intel_crtc_update_cursor(struct drm_crtc *crtc, bool on);
45 
46 static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
47 				struct intel_crtc_config *pipe_config);
48 static void ironlake_pch_clock_get(struct intel_crtc *crtc,
49 				   struct intel_crtc_config *pipe_config);
50 
51 static int intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode,
52 			  int x, int y, struct drm_framebuffer *old_fb);
53 static int intel_framebuffer_init(struct drm_device *dev,
54 				  struct intel_framebuffer *ifb,
55 				  struct drm_mode_fb_cmd2 *mode_cmd,
56 				  struct drm_i915_gem_object *obj);
57 static void intel_dp_set_m_n(struct intel_crtc *crtc);
58 static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc);
59 static void intel_set_pipe_timings(struct intel_crtc *intel_crtc);
60 static void intel_cpu_transcoder_set_m_n(struct intel_crtc *crtc,
61 					 struct intel_link_m_n *m_n);
62 static void ironlake_set_pipeconf(struct drm_crtc *crtc);
63 static void haswell_set_pipeconf(struct drm_crtc *crtc);
64 static void intel_set_pipe_csc(struct drm_crtc *crtc);
65 static void vlv_prepare_pll(struct intel_crtc *crtc);
66 
67 typedef struct {
68 	int	min, max;
69 } intel_range_t;
70 
71 typedef struct {
72 	int	dot_limit;
73 	int	p2_slow, p2_fast;
74 } intel_p2_t;
75 
76 typedef struct intel_limit intel_limit_t;
77 struct intel_limit {
78 	intel_range_t   dot, vco, n, m, m1, m2, p, p1;
79 	intel_p2_t	    p2;
80 };
81 
82 int
83 intel_pch_rawclk(struct drm_device *dev)
84 {
85 	struct drm_i915_private *dev_priv = dev->dev_private;
86 
87 	WARN_ON(!HAS_PCH_SPLIT(dev));
88 
89 	return I915_READ(PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK;
90 }
91 
92 static inline u32 /* units of 100MHz */
93 intel_fdi_link_freq(struct drm_device *dev)
94 {
95 	if (IS_GEN5(dev)) {
96 		struct drm_i915_private *dev_priv = dev->dev_private;
97 		return (I915_READ(FDI_PLL_BIOS_0) & FDI_PLL_FB_CLOCK_MASK) + 2;
98 	} else
99 		return 27;
100 }
101 
102 static const intel_limit_t intel_limits_i8xx_dac = {
103 	.dot = { .min = 25000, .max = 350000 },
104 	.vco = { .min = 908000, .max = 1512000 },
105 	.n = { .min = 2, .max = 16 },
106 	.m = { .min = 96, .max = 140 },
107 	.m1 = { .min = 18, .max = 26 },
108 	.m2 = { .min = 6, .max = 16 },
109 	.p = { .min = 4, .max = 128 },
110 	.p1 = { .min = 2, .max = 33 },
111 	.p2 = { .dot_limit = 165000,
112 		.p2_slow = 4, .p2_fast = 2 },
113 };
114 
115 static const intel_limit_t intel_limits_i8xx_dvo = {
116 	.dot = { .min = 25000, .max = 350000 },
117 	.vco = { .min = 908000, .max = 1512000 },
118 	.n = { .min = 2, .max = 16 },
119 	.m = { .min = 96, .max = 140 },
120 	.m1 = { .min = 18, .max = 26 },
121 	.m2 = { .min = 6, .max = 16 },
122 	.p = { .min = 4, .max = 128 },
123 	.p1 = { .min = 2, .max = 33 },
124 	.p2 = { .dot_limit = 165000,
125 		.p2_slow = 4, .p2_fast = 4 },
126 };
127 
128 static const intel_limit_t intel_limits_i8xx_lvds = {
129 	.dot = { .min = 25000, .max = 350000 },
130 	.vco = { .min = 908000, .max = 1512000 },
131 	.n = { .min = 2, .max = 16 },
132 	.m = { .min = 96, .max = 140 },
133 	.m1 = { .min = 18, .max = 26 },
134 	.m2 = { .min = 6, .max = 16 },
135 	.p = { .min = 4, .max = 128 },
136 	.p1 = { .min = 1, .max = 6 },
137 	.p2 = { .dot_limit = 165000,
138 		.p2_slow = 14, .p2_fast = 7 },
139 };
140 
141 static const intel_limit_t intel_limits_i9xx_sdvo = {
142 	.dot = { .min = 20000, .max = 400000 },
143 	.vco = { .min = 1400000, .max = 2800000 },
144 	.n = { .min = 1, .max = 6 },
145 	.m = { .min = 70, .max = 120 },
146 	.m1 = { .min = 8, .max = 18 },
147 	.m2 = { .min = 3, .max = 7 },
148 	.p = { .min = 5, .max = 80 },
149 	.p1 = { .min = 1, .max = 8 },
150 	.p2 = { .dot_limit = 200000,
151 		.p2_slow = 10, .p2_fast = 5 },
152 };
153 
154 static const intel_limit_t intel_limits_i9xx_lvds = {
155 	.dot = { .min = 20000, .max = 400000 },
156 	.vco = { .min = 1400000, .max = 2800000 },
157 	.n = { .min = 1, .max = 6 },
158 	.m = { .min = 70, .max = 120 },
159 	.m1 = { .min = 8, .max = 18 },
160 	.m2 = { .min = 3, .max = 7 },
161 	.p = { .min = 7, .max = 98 },
162 	.p1 = { .min = 1, .max = 8 },
163 	.p2 = { .dot_limit = 112000,
164 		.p2_slow = 14, .p2_fast = 7 },
165 };
166 
167 
168 static const intel_limit_t intel_limits_g4x_sdvo = {
169 	.dot = { .min = 25000, .max = 270000 },
170 	.vco = { .min = 1750000, .max = 3500000},
171 	.n = { .min = 1, .max = 4 },
172 	.m = { .min = 104, .max = 138 },
173 	.m1 = { .min = 17, .max = 23 },
174 	.m2 = { .min = 5, .max = 11 },
175 	.p = { .min = 10, .max = 30 },
176 	.p1 = { .min = 1, .max = 3},
177 	.p2 = { .dot_limit = 270000,
178 		.p2_slow = 10,
179 		.p2_fast = 10
180 	},
181 };
182 
183 static const intel_limit_t intel_limits_g4x_hdmi = {
184 	.dot = { .min = 22000, .max = 400000 },
185 	.vco = { .min = 1750000, .max = 3500000},
186 	.n = { .min = 1, .max = 4 },
187 	.m = { .min = 104, .max = 138 },
188 	.m1 = { .min = 16, .max = 23 },
189 	.m2 = { .min = 5, .max = 11 },
190 	.p = { .min = 5, .max = 80 },
191 	.p1 = { .min = 1, .max = 8},
192 	.p2 = { .dot_limit = 165000,
193 		.p2_slow = 10, .p2_fast = 5 },
194 };
195 
196 static const intel_limit_t intel_limits_g4x_single_channel_lvds = {
197 	.dot = { .min = 20000, .max = 115000 },
198 	.vco = { .min = 1750000, .max = 3500000 },
199 	.n = { .min = 1, .max = 3 },
200 	.m = { .min = 104, .max = 138 },
201 	.m1 = { .min = 17, .max = 23 },
202 	.m2 = { .min = 5, .max = 11 },
203 	.p = { .min = 28, .max = 112 },
204 	.p1 = { .min = 2, .max = 8 },
205 	.p2 = { .dot_limit = 0,
206 		.p2_slow = 14, .p2_fast = 14
207 	},
208 };
209 
210 static const intel_limit_t intel_limits_g4x_dual_channel_lvds = {
211 	.dot = { .min = 80000, .max = 224000 },
212 	.vco = { .min = 1750000, .max = 3500000 },
213 	.n = { .min = 1, .max = 3 },
214 	.m = { .min = 104, .max = 138 },
215 	.m1 = { .min = 17, .max = 23 },
216 	.m2 = { .min = 5, .max = 11 },
217 	.p = { .min = 14, .max = 42 },
218 	.p1 = { .min = 2, .max = 6 },
219 	.p2 = { .dot_limit = 0,
220 		.p2_slow = 7, .p2_fast = 7
221 	},
222 };
223 
224 static const intel_limit_t intel_limits_pineview_sdvo = {
225 	.dot = { .min = 20000, .max = 400000},
226 	.vco = { .min = 1700000, .max = 3500000 },
227 	/* Pineview's Ncounter is a ring counter */
228 	.n = { .min = 3, .max = 6 },
229 	.m = { .min = 2, .max = 256 },
230 	/* Pineview only has one combined m divider, which we treat as m2. */
231 	.m1 = { .min = 0, .max = 0 },
232 	.m2 = { .min = 0, .max = 254 },
233 	.p = { .min = 5, .max = 80 },
234 	.p1 = { .min = 1, .max = 8 },
235 	.p2 = { .dot_limit = 200000,
236 		.p2_slow = 10, .p2_fast = 5 },
237 };
238 
239 static const intel_limit_t intel_limits_pineview_lvds = {
240 	.dot = { .min = 20000, .max = 400000 },
241 	.vco = { .min = 1700000, .max = 3500000 },
242 	.n = { .min = 3, .max = 6 },
243 	.m = { .min = 2, .max = 256 },
244 	.m1 = { .min = 0, .max = 0 },
245 	.m2 = { .min = 0, .max = 254 },
246 	.p = { .min = 7, .max = 112 },
247 	.p1 = { .min = 1, .max = 8 },
248 	.p2 = { .dot_limit = 112000,
249 		.p2_slow = 14, .p2_fast = 14 },
250 };
251 
252 /* Ironlake / Sandybridge
253  *
254  * We calculate clock using (register_value + 2) for N/M1/M2, so here
255  * the range value for them is (actual_value - 2).
256  */
257 static const intel_limit_t intel_limits_ironlake_dac = {
258 	.dot = { .min = 25000, .max = 350000 },
259 	.vco = { .min = 1760000, .max = 3510000 },
260 	.n = { .min = 1, .max = 5 },
261 	.m = { .min = 79, .max = 127 },
262 	.m1 = { .min = 12, .max = 22 },
263 	.m2 = { .min = 5, .max = 9 },
264 	.p = { .min = 5, .max = 80 },
265 	.p1 = { .min = 1, .max = 8 },
266 	.p2 = { .dot_limit = 225000,
267 		.p2_slow = 10, .p2_fast = 5 },
268 };
269 
270 static const intel_limit_t intel_limits_ironlake_single_lvds = {
271 	.dot = { .min = 25000, .max = 350000 },
272 	.vco = { .min = 1760000, .max = 3510000 },
273 	.n = { .min = 1, .max = 3 },
274 	.m = { .min = 79, .max = 118 },
275 	.m1 = { .min = 12, .max = 22 },
276 	.m2 = { .min = 5, .max = 9 },
277 	.p = { .min = 28, .max = 112 },
278 	.p1 = { .min = 2, .max = 8 },
279 	.p2 = { .dot_limit = 225000,
280 		.p2_slow = 14, .p2_fast = 14 },
281 };
282 
283 static const intel_limit_t intel_limits_ironlake_dual_lvds = {
284 	.dot = { .min = 25000, .max = 350000 },
285 	.vco = { .min = 1760000, .max = 3510000 },
286 	.n = { .min = 1, .max = 3 },
287 	.m = { .min = 79, .max = 127 },
288 	.m1 = { .min = 12, .max = 22 },
289 	.m2 = { .min = 5, .max = 9 },
290 	.p = { .min = 14, .max = 56 },
291 	.p1 = { .min = 2, .max = 8 },
292 	.p2 = { .dot_limit = 225000,
293 		.p2_slow = 7, .p2_fast = 7 },
294 };
295 
296 /* LVDS 100mhz refclk limits. */
297 static const intel_limit_t intel_limits_ironlake_single_lvds_100m = {
298 	.dot = { .min = 25000, .max = 350000 },
299 	.vco = { .min = 1760000, .max = 3510000 },
300 	.n = { .min = 1, .max = 2 },
301 	.m = { .min = 79, .max = 126 },
302 	.m1 = { .min = 12, .max = 22 },
303 	.m2 = { .min = 5, .max = 9 },
304 	.p = { .min = 28, .max = 112 },
305 	.p1 = { .min = 2, .max = 8 },
306 	.p2 = { .dot_limit = 225000,
307 		.p2_slow = 14, .p2_fast = 14 },
308 };
309 
310 static const intel_limit_t intel_limits_ironlake_dual_lvds_100m = {
311 	.dot = { .min = 25000, .max = 350000 },
312 	.vco = { .min = 1760000, .max = 3510000 },
313 	.n = { .min = 1, .max = 3 },
314 	.m = { .min = 79, .max = 126 },
315 	.m1 = { .min = 12, .max = 22 },
316 	.m2 = { .min = 5, .max = 9 },
317 	.p = { .min = 14, .max = 42 },
318 	.p1 = { .min = 2, .max = 6 },
319 	.p2 = { .dot_limit = 225000,
320 		.p2_slow = 7, .p2_fast = 7 },
321 };
322 
323 static const intel_limit_t intel_limits_vlv = {
324 	 /*
325 	  * These are the data rate limits (measured in fast clocks)
326 	  * since those are the strictest limits we have. The fast
327 	  * clock and actual rate limits are more relaxed, so checking
328 	  * them would make no difference.
329 	  */
330 	.dot = { .min = 25000 * 5, .max = 270000 * 5 },
331 	.vco = { .min = 4000000, .max = 6000000 },
332 	.n = { .min = 1, .max = 7 },
333 	.m1 = { .min = 2, .max = 3 },
334 	.m2 = { .min = 11, .max = 156 },
335 	.p1 = { .min = 2, .max = 3 },
336 	.p2 = { .p2_slow = 2, .p2_fast = 20 }, /* slow=min, fast=max */
337 };
338 
339 static const intel_limit_t intel_limits_chv = {
340 	/*
341 	 * These are the data rate limits (measured in fast clocks)
342 	 * since those are the strictest limits we have.  The fast
343 	 * clock and actual rate limits are more relaxed, so checking
344 	 * them would make no difference.
345 	 */
346 	.dot = { .min = 25000 * 5, .max = 540000 * 5},
347 	.vco = { .min = 4860000, .max = 6700000 },
348 	.n = { .min = 1, .max = 1 },
349 	.m1 = { .min = 2, .max = 2 },
350 	.m2 = { .min = 24 << 22, .max = 175 << 22 },
351 	.p1 = { .min = 2, .max = 4 },
352 	.p2 = {	.p2_slow = 1, .p2_fast = 14 },
353 };
354 
355 static void vlv_clock(int refclk, intel_clock_t *clock)
356 {
357 	clock->m = clock->m1 * clock->m2;
358 	clock->p = clock->p1 * clock->p2;
359 	if (WARN_ON(clock->n == 0 || clock->p == 0))
360 		return;
361 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
362 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
363 }
364 
365 /**
366  * Returns whether any output on the specified pipe is of the specified type
367  */
368 static bool intel_pipe_has_type(struct drm_crtc *crtc, int type)
369 {
370 	struct drm_device *dev = crtc->dev;
371 	struct intel_encoder *encoder;
372 
373 	for_each_encoder_on_crtc(dev, crtc, encoder)
374 		if (encoder->type == type)
375 			return true;
376 
377 	return false;
378 }
379 
380 static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
381 						int refclk)
382 {
383 	struct drm_device *dev = crtc->dev;
384 	const intel_limit_t *limit;
385 
386 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
387 		if (intel_is_dual_link_lvds(dev)) {
388 			if (refclk == 100000)
389 				limit = &intel_limits_ironlake_dual_lvds_100m;
390 			else
391 				limit = &intel_limits_ironlake_dual_lvds;
392 		} else {
393 			if (refclk == 100000)
394 				limit = &intel_limits_ironlake_single_lvds_100m;
395 			else
396 				limit = &intel_limits_ironlake_single_lvds;
397 		}
398 	} else
399 		limit = &intel_limits_ironlake_dac;
400 
401 	return limit;
402 }
403 
404 static const intel_limit_t *intel_g4x_limit(struct drm_crtc *crtc)
405 {
406 	struct drm_device *dev = crtc->dev;
407 	const intel_limit_t *limit;
408 
409 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
410 		if (intel_is_dual_link_lvds(dev))
411 			limit = &intel_limits_g4x_dual_channel_lvds;
412 		else
413 			limit = &intel_limits_g4x_single_channel_lvds;
414 	} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI) ||
415 		   intel_pipe_has_type(crtc, INTEL_OUTPUT_ANALOG)) {
416 		limit = &intel_limits_g4x_hdmi;
417 	} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO)) {
418 		limit = &intel_limits_g4x_sdvo;
419 	} else /* The option is for other outputs */
420 		limit = &intel_limits_i9xx_sdvo;
421 
422 	return limit;
423 }
424 
425 static const intel_limit_t *intel_limit(struct drm_crtc *crtc, int refclk)
426 {
427 	struct drm_device *dev = crtc->dev;
428 	const intel_limit_t *limit;
429 
430 	if (HAS_PCH_SPLIT(dev))
431 		limit = intel_ironlake_limit(crtc, refclk);
432 	else if (IS_G4X(dev)) {
433 		limit = intel_g4x_limit(crtc);
434 	} else if (IS_PINEVIEW(dev)) {
435 		if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
436 			limit = &intel_limits_pineview_lvds;
437 		else
438 			limit = &intel_limits_pineview_sdvo;
439 	} else if (IS_CHERRYVIEW(dev)) {
440 		limit = &intel_limits_chv;
441 	} else if (IS_VALLEYVIEW(dev)) {
442 		limit = &intel_limits_vlv;
443 	} else if (!IS_GEN2(dev)) {
444 		if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
445 			limit = &intel_limits_i9xx_lvds;
446 		else
447 			limit = &intel_limits_i9xx_sdvo;
448 	} else {
449 		if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
450 			limit = &intel_limits_i8xx_lvds;
451 		else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DVO))
452 			limit = &intel_limits_i8xx_dvo;
453 		else
454 			limit = &intel_limits_i8xx_dac;
455 	}
456 	return limit;
457 }
458 
459 /* m1 is reserved as 0 in Pineview, n is a ring counter */
460 static void pineview_clock(int refclk, intel_clock_t *clock)
461 {
462 	clock->m = clock->m2 + 2;
463 	clock->p = clock->p1 * clock->p2;
464 	if (WARN_ON(clock->n == 0 || clock->p == 0))
465 		return;
466 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
467 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
468 }
469 
470 static uint32_t i9xx_dpll_compute_m(struct dpll *dpll)
471 {
472 	return 5 * (dpll->m1 + 2) + (dpll->m2 + 2);
473 }
474 
475 static void i9xx_clock(int refclk, intel_clock_t *clock)
476 {
477 	clock->m = i9xx_dpll_compute_m(clock);
478 	clock->p = clock->p1 * clock->p2;
479 	if (WARN_ON(clock->n + 2 == 0 || clock->p == 0))
480 		return;
481 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
482 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
483 }
484 
485 static void chv_clock(int refclk, intel_clock_t *clock)
486 {
487 	clock->m = clock->m1 * clock->m2;
488 	clock->p = clock->p1 * clock->p2;
489 	if (WARN_ON(clock->n == 0 || clock->p == 0))
490 		return;
491 	clock->vco = DIV_ROUND_CLOSEST_ULL((uint64_t)refclk * clock->m,
492 			clock->n << 22);
493 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
494 }
495 
496 #define INTELPllInvalid(s)   do { /* DRM_DEBUG(s); */ return false; } while (0)
497 /**
498  * Returns whether the given set of divisors are valid for a given refclk with
499  * the given connectors.
500  */
501 
502 static bool intel_PLL_is_valid(struct drm_device *dev,
503 			       const intel_limit_t *limit,
504 			       const intel_clock_t *clock)
505 {
506 	if (clock->n   < limit->n.min   || limit->n.max   < clock->n)
507 		INTELPllInvalid("n out of range\n");
508 	if (clock->p1  < limit->p1.min  || limit->p1.max  < clock->p1)
509 		INTELPllInvalid("p1 out of range\n");
510 	if (clock->m2  < limit->m2.min  || limit->m2.max  < clock->m2)
511 		INTELPllInvalid("m2 out of range\n");
512 	if (clock->m1  < limit->m1.min  || limit->m1.max  < clock->m1)
513 		INTELPllInvalid("m1 out of range\n");
514 
515 	if (!IS_PINEVIEW(dev) && !IS_VALLEYVIEW(dev))
516 		if (clock->m1 <= clock->m2)
517 			INTELPllInvalid("m1 <= m2\n");
518 
519 	if (!IS_VALLEYVIEW(dev)) {
520 		if (clock->p < limit->p.min || limit->p.max < clock->p)
521 			INTELPllInvalid("p out of range\n");
522 		if (clock->m < limit->m.min || limit->m.max < clock->m)
523 			INTELPllInvalid("m out of range\n");
524 	}
525 
526 	if (clock->vco < limit->vco.min || limit->vco.max < clock->vco)
527 		INTELPllInvalid("vco out of range\n");
528 	/* XXX: We may need to be checking "Dot clock" depending on the multiplier,
529 	 * connector, etc., rather than just a single range.
530 	 */
531 	if (clock->dot < limit->dot.min || limit->dot.max < clock->dot)
532 		INTELPllInvalid("dot out of range\n");
533 
534 	return true;
535 }
536 
537 static bool
538 i9xx_find_best_dpll(const intel_limit_t *limit, struct drm_crtc *crtc,
539 		    int target, int refclk, intel_clock_t *match_clock,
540 		    intel_clock_t *best_clock)
541 {
542 	struct drm_device *dev = crtc->dev;
543 	intel_clock_t clock;
544 	int err = target;
545 
546 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
547 		/*
548 		 * For LVDS just rely on its current settings for dual-channel.
549 		 * We haven't figured out how to reliably set up different
550 		 * single/dual channel state, if we even can.
551 		 */
552 		if (intel_is_dual_link_lvds(dev))
553 			clock.p2 = limit->p2.p2_fast;
554 		else
555 			clock.p2 = limit->p2.p2_slow;
556 	} else {
557 		if (target < limit->p2.dot_limit)
558 			clock.p2 = limit->p2.p2_slow;
559 		else
560 			clock.p2 = limit->p2.p2_fast;
561 	}
562 
563 	memset(best_clock, 0, sizeof(*best_clock));
564 
565 	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
566 	     clock.m1++) {
567 		for (clock.m2 = limit->m2.min;
568 		     clock.m2 <= limit->m2.max; clock.m2++) {
569 			if (clock.m2 >= clock.m1)
570 				break;
571 			for (clock.n = limit->n.min;
572 			     clock.n <= limit->n.max; clock.n++) {
573 				for (clock.p1 = limit->p1.min;
574 					clock.p1 <= limit->p1.max; clock.p1++) {
575 					int this_err;
576 
577 					i9xx_clock(refclk, &clock);
578 					if (!intel_PLL_is_valid(dev, limit,
579 								&clock))
580 						continue;
581 					if (match_clock &&
582 					    clock.p != match_clock->p)
583 						continue;
584 
585 					this_err = abs(clock.dot - target);
586 					if (this_err < err) {
587 						*best_clock = clock;
588 						err = this_err;
589 					}
590 				}
591 			}
592 		}
593 	}
594 
595 	return (err != target);
596 }
597 
598 static bool
599 pnv_find_best_dpll(const intel_limit_t *limit, struct drm_crtc *crtc,
600 		   int target, int refclk, intel_clock_t *match_clock,
601 		   intel_clock_t *best_clock)
602 {
603 	struct drm_device *dev = crtc->dev;
604 	intel_clock_t clock;
605 	int err = target;
606 
607 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
608 		/*
609 		 * For LVDS just rely on its current settings for dual-channel.
610 		 * We haven't figured out how to reliably set up different
611 		 * single/dual channel state, if we even can.
612 		 */
613 		if (intel_is_dual_link_lvds(dev))
614 			clock.p2 = limit->p2.p2_fast;
615 		else
616 			clock.p2 = limit->p2.p2_slow;
617 	} else {
618 		if (target < limit->p2.dot_limit)
619 			clock.p2 = limit->p2.p2_slow;
620 		else
621 			clock.p2 = limit->p2.p2_fast;
622 	}
623 
624 	memset(best_clock, 0, sizeof(*best_clock));
625 
626 	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
627 	     clock.m1++) {
628 		for (clock.m2 = limit->m2.min;
629 		     clock.m2 <= limit->m2.max; clock.m2++) {
630 			for (clock.n = limit->n.min;
631 			     clock.n <= limit->n.max; clock.n++) {
632 				for (clock.p1 = limit->p1.min;
633 					clock.p1 <= limit->p1.max; clock.p1++) {
634 					int this_err;
635 
636 					pineview_clock(refclk, &clock);
637 					if (!intel_PLL_is_valid(dev, limit,
638 								&clock))
639 						continue;
640 					if (match_clock &&
641 					    clock.p != match_clock->p)
642 						continue;
643 
644 					this_err = abs(clock.dot - target);
645 					if (this_err < err) {
646 						*best_clock = clock;
647 						err = this_err;
648 					}
649 				}
650 			}
651 		}
652 	}
653 
654 	return (err != target);
655 }
656 
657 static bool
658 g4x_find_best_dpll(const intel_limit_t *limit, struct drm_crtc *crtc,
659 		   int target, int refclk, intel_clock_t *match_clock,
660 		   intel_clock_t *best_clock)
661 {
662 	struct drm_device *dev = crtc->dev;
663 	intel_clock_t clock;
664 	int max_n;
665 	bool found;
666 	/* approximately equals target * 0.00585 */
667 	int err_most = (target >> 8) + (target >> 9);
668 	found = false;
669 
670 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
671 		if (intel_is_dual_link_lvds(dev))
672 			clock.p2 = limit->p2.p2_fast;
673 		else
674 			clock.p2 = limit->p2.p2_slow;
675 	} else {
676 		if (target < limit->p2.dot_limit)
677 			clock.p2 = limit->p2.p2_slow;
678 		else
679 			clock.p2 = limit->p2.p2_fast;
680 	}
681 
682 	memset(best_clock, 0, sizeof(*best_clock));
683 	max_n = limit->n.max;
684 	/* based on hardware requirement, prefer smaller n to precision */
685 	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
686 		/* based on hardware requirement, prefere larger m1,m2 */
687 		for (clock.m1 = limit->m1.max;
688 		     clock.m1 >= limit->m1.min; clock.m1--) {
689 			for (clock.m2 = limit->m2.max;
690 			     clock.m2 >= limit->m2.min; clock.m2--) {
691 				for (clock.p1 = limit->p1.max;
692 				     clock.p1 >= limit->p1.min; clock.p1--) {
693 					int this_err;
694 
695 					i9xx_clock(refclk, &clock);
696 					if (!intel_PLL_is_valid(dev, limit,
697 								&clock))
698 						continue;
699 
700 					this_err = abs(clock.dot - target);
701 					if (this_err < err_most) {
702 						*best_clock = clock;
703 						err_most = this_err;
704 						max_n = clock.n;
705 						found = true;
706 					}
707 				}
708 			}
709 		}
710 	}
711 	return found;
712 }
713 
714 static bool
715 vlv_find_best_dpll(const intel_limit_t *limit, struct drm_crtc *crtc,
716 		   int target, int refclk, intel_clock_t *match_clock,
717 		   intel_clock_t *best_clock)
718 {
719 	struct drm_device *dev = crtc->dev;
720 	intel_clock_t clock;
721 	unsigned int bestppm = 1000000;
722 	/* min update 19.2 MHz */
723 	int max_n = min(limit->n.max, refclk / 19200);
724 	bool found = false;
725 
726 	target *= 5; /* fast clock */
727 
728 	memset(best_clock, 0, sizeof(*best_clock));
729 
730 	/* based on hardware requirement, prefer smaller n to precision */
731 	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
732 		for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
733 			for (clock.p2 = limit->p2.p2_fast; clock.p2 >= limit->p2.p2_slow;
734 			     clock.p2 -= clock.p2 > 10 ? 2 : 1) {
735 				clock.p = clock.p1 * clock.p2;
736 				/* based on hardware requirement, prefer bigger m1,m2 values */
737 				for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
738 					unsigned int ppm, diff;
739 
740 					clock.m2 = DIV_ROUND_CLOSEST(target * clock.p * clock.n,
741 								     refclk * clock.m1);
742 
743 					vlv_clock(refclk, &clock);
744 
745 					if (!intel_PLL_is_valid(dev, limit,
746 								&clock))
747 						continue;
748 
749 					diff = abs(clock.dot - target);
750 					ppm = div_u64(1000000ULL * diff, target);
751 
752 					if (ppm < 100 && clock.p > best_clock->p) {
753 						bestppm = 0;
754 						*best_clock = clock;
755 						found = true;
756 					}
757 
758 					if (bestppm >= 10 && ppm < bestppm - 10) {
759 						bestppm = ppm;
760 						*best_clock = clock;
761 						found = true;
762 					}
763 				}
764 			}
765 		}
766 	}
767 
768 	return found;
769 }
770 
771 static bool
772 chv_find_best_dpll(const intel_limit_t *limit, struct drm_crtc *crtc,
773 		   int target, int refclk, intel_clock_t *match_clock,
774 		   intel_clock_t *best_clock)
775 {
776 	struct drm_device *dev = crtc->dev;
777 	intel_clock_t clock;
778 	uint64_t m2;
779 	int found = false;
780 
781 	memset(best_clock, 0, sizeof(*best_clock));
782 
783 	/*
784 	 * Based on hardware doc, the n always set to 1, and m1 always
785 	 * set to 2.  If requires to support 200Mhz refclk, we need to
786 	 * revisit this because n may not 1 anymore.
787 	 */
788 	clock.n = 1, clock.m1 = 2;
789 	target *= 5;	/* fast clock */
790 
791 	for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
792 		for (clock.p2 = limit->p2.p2_fast;
793 				clock.p2 >= limit->p2.p2_slow;
794 				clock.p2 -= clock.p2 > 10 ? 2 : 1) {
795 
796 			clock.p = clock.p1 * clock.p2;
797 
798 			m2 = DIV_ROUND_CLOSEST_ULL(((uint64_t)target * clock.p *
799 					clock.n) << 22, refclk * clock.m1);
800 
801 			if (m2 > INT_MAX/clock.m1)
802 				continue;
803 
804 			clock.m2 = m2;
805 
806 			chv_clock(refclk, &clock);
807 
808 			if (!intel_PLL_is_valid(dev, limit, &clock))
809 				continue;
810 
811 			/* based on hardware requirement, prefer bigger p
812 			 */
813 			if (clock.p > best_clock->p) {
814 				*best_clock = clock;
815 				found = true;
816 			}
817 		}
818 	}
819 
820 	return found;
821 }
822 
823 bool intel_crtc_active(struct drm_crtc *crtc)
824 {
825 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
826 
827 	/* Be paranoid as we can arrive here with only partial
828 	 * state retrieved from the hardware during setup.
829 	 *
830 	 * We can ditch the adjusted_mode.crtc_clock check as soon
831 	 * as Haswell has gained clock readout/fastboot support.
832 	 *
833 	 * We can ditch the crtc->primary->fb check as soon as we can
834 	 * properly reconstruct framebuffers.
835 	 */
836 	return intel_crtc->active && crtc->primary->fb &&
837 		intel_crtc->config.adjusted_mode.crtc_clock;
838 }
839 
840 enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv,
841 					     enum i915_pipe pipe)
842 {
843 	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
844 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
845 
846 	return intel_crtc->config.cpu_transcoder;
847 }
848 
849 static void g4x_wait_for_vblank(struct drm_device *dev, int pipe)
850 {
851 	struct drm_i915_private *dev_priv = dev->dev_private;
852 	u32 frame, frame_reg = PIPE_FRMCOUNT_GM45(pipe);
853 
854 	frame = I915_READ(frame_reg);
855 
856 	if (wait_for(I915_READ_NOTRACE(frame_reg) != frame, 50))
857 		WARN(1, "vblank wait timed out\n");
858 }
859 
860 /**
861  * intel_wait_for_vblank - wait for vblank on a given pipe
862  * @dev: drm device
863  * @pipe: pipe to wait for
864  *
865  * Wait for vblank to occur on a given pipe.  Needed for various bits of
866  * mode setting code.
867  */
868 void intel_wait_for_vblank(struct drm_device *dev, int pipe)
869 {
870 	struct drm_i915_private *dev_priv = dev->dev_private;
871 	int pipestat_reg = PIPESTAT(pipe);
872 
873 	if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
874 		g4x_wait_for_vblank(dev, pipe);
875 		return;
876 	}
877 
878 	/* Clear existing vblank status. Note this will clear any other
879 	 * sticky status fields as well.
880 	 *
881 	 * This races with i915_driver_irq_handler() with the result
882 	 * that either function could miss a vblank event.  Here it is not
883 	 * fatal, as we will either wait upon the next vblank interrupt or
884 	 * timeout.  Generally speaking intel_wait_for_vblank() is only
885 	 * called during modeset at which time the GPU should be idle and
886 	 * should *not* be performing page flips and thus not waiting on
887 	 * vblanks...
888 	 * Currently, the result of us stealing a vblank from the irq
889 	 * handler is that a single frame will be skipped during swapbuffers.
890 	 */
891 	I915_WRITE(pipestat_reg,
892 		   I915_READ(pipestat_reg) | PIPE_VBLANK_INTERRUPT_STATUS);
893 
894 	/* Wait for vblank interrupt bit to set */
895 	if (wait_for(I915_READ(pipestat_reg) &
896 		     PIPE_VBLANK_INTERRUPT_STATUS,
897 		     50))
898 		DRM_DEBUG_KMS("vblank wait timed out\n");
899 }
900 
901 static bool pipe_dsl_stopped(struct drm_device *dev, enum i915_pipe pipe)
902 {
903 	struct drm_i915_private *dev_priv = dev->dev_private;
904 	u32 reg = PIPEDSL(pipe);
905 	u32 line1, line2;
906 	u32 line_mask;
907 
908 	if (IS_GEN2(dev))
909 		line_mask = DSL_LINEMASK_GEN2;
910 	else
911 		line_mask = DSL_LINEMASK_GEN3;
912 
913 	line1 = I915_READ(reg) & line_mask;
914 	mdelay(5);
915 	line2 = I915_READ(reg) & line_mask;
916 
917 	return line1 == line2;
918 }
919 
920 /*
921  * intel_wait_for_pipe_off - wait for pipe to turn off
922  * @dev: drm device
923  * @pipe: pipe to wait for
924  *
925  * After disabling a pipe, we can't wait for vblank in the usual way,
926  * spinning on the vblank interrupt status bit, since we won't actually
927  * see an interrupt when the pipe is disabled.
928  *
929  * On Gen4 and above:
930  *   wait for the pipe register state bit to turn off
931  *
932  * Otherwise:
933  *   wait for the display line value to settle (it usually
934  *   ends up stopping at the start of the next frame).
935  *
936  */
937 void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
938 {
939 	struct drm_i915_private *dev_priv = dev->dev_private;
940 	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
941 								      pipe);
942 
943 	if (INTEL_INFO(dev)->gen >= 4) {
944 		int reg = PIPECONF(cpu_transcoder);
945 
946 		/* Wait for the Pipe State to go off */
947 		if (wait_for((I915_READ(reg) & I965_PIPECONF_ACTIVE) == 0,
948 			     100))
949 			WARN(1, "pipe_off wait timed out\n");
950 	} else {
951 		/* Wait for the display line to settle */
952 		if (wait_for(pipe_dsl_stopped(dev, pipe), 100))
953 			WARN(1, "pipe_off wait timed out\n");
954 	}
955 }
956 
957 /*
958  * ibx_digital_port_connected - is the specified port connected?
959  * @dev_priv: i915 private structure
960  * @port: the port to test
961  *
962  * Returns true if @port is connected, false otherwise.
963  */
964 bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
965 				struct intel_digital_port *port)
966 {
967 	u32 bit;
968 
969 	if (HAS_PCH_IBX(dev_priv->dev)) {
970 		switch (port->port) {
971 		case PORT_B:
972 			bit = SDE_PORTB_HOTPLUG;
973 			break;
974 		case PORT_C:
975 			bit = SDE_PORTC_HOTPLUG;
976 			break;
977 		case PORT_D:
978 			bit = SDE_PORTD_HOTPLUG;
979 			break;
980 		default:
981 			return true;
982 		}
983 	} else {
984 		switch (port->port) {
985 		case PORT_B:
986 			bit = SDE_PORTB_HOTPLUG_CPT;
987 			break;
988 		case PORT_C:
989 			bit = SDE_PORTC_HOTPLUG_CPT;
990 			break;
991 		case PORT_D:
992 			bit = SDE_PORTD_HOTPLUG_CPT;
993 			break;
994 		default:
995 			return true;
996 		}
997 	}
998 
999 	return I915_READ(SDEISR) & bit;
1000 }
1001 
1002 static const char *state_string(bool enabled)
1003 {
1004 	return enabled ? "on" : "off";
1005 }
1006 
1007 /* Only for pre-ILK configs */
1008 void assert_pll(struct drm_i915_private *dev_priv,
1009 		enum i915_pipe pipe, bool state)
1010 {
1011 	int reg;
1012 	u32 val;
1013 	bool cur_state;
1014 
1015 	reg = DPLL(pipe);
1016 	val = I915_READ(reg);
1017 	cur_state = !!(val & DPLL_VCO_ENABLE);
1018 	WARN(cur_state != state,
1019 	     "PLL state assertion failure (expected %s, current %s)\n",
1020 	     state_string(state), state_string(cur_state));
1021 }
1022 
1023 /* XXX: the dsi pll is shared between MIPI DSI ports */
1024 static void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state)
1025 {
1026 	u32 val;
1027 	bool cur_state;
1028 
1029 	mutex_lock(&dev_priv->dpio_lock);
1030 	val = vlv_cck_read(dev_priv, CCK_REG_DSI_PLL_CONTROL);
1031 	mutex_unlock(&dev_priv->dpio_lock);
1032 
1033 	cur_state = val & DSI_PLL_VCO_EN;
1034 	WARN(cur_state != state,
1035 	     "DSI PLL state assertion failure (expected %s, current %s)\n",
1036 	     state_string(state), state_string(cur_state));
1037 }
1038 #define assert_dsi_pll_enabled(d) assert_dsi_pll(d, true)
1039 #define assert_dsi_pll_disabled(d) assert_dsi_pll(d, false)
1040 
1041 struct intel_shared_dpll *
1042 intel_crtc_to_shared_dpll(struct intel_crtc *crtc)
1043 {
1044 	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
1045 
1046 	if (crtc->config.shared_dpll < 0)
1047 		return NULL;
1048 
1049 	return &dev_priv->shared_dplls[crtc->config.shared_dpll];
1050 }
1051 
1052 /* For ILK+ */
1053 void assert_shared_dpll(struct drm_i915_private *dev_priv,
1054 			struct intel_shared_dpll *pll,
1055 			bool state)
1056 {
1057 	bool cur_state;
1058 	struct intel_dpll_hw_state hw_state;
1059 
1060 	if (HAS_PCH_LPT(dev_priv->dev)) {
1061 		DRM_DEBUG_DRIVER("LPT detected: skipping PCH PLL test\n");
1062 		return;
1063 	}
1064 
1065 	if (WARN (!pll,
1066 		  "asserting DPLL %s with no DPLL\n", state_string(state)))
1067 		return;
1068 
1069 	cur_state = pll->get_hw_state(dev_priv, pll, &hw_state);
1070 	WARN(cur_state != state,
1071 	     "%s assertion failure (expected %s, current %s)\n",
1072 	     pll->name, state_string(state), state_string(cur_state));
1073 }
1074 
1075 static void assert_fdi_tx(struct drm_i915_private *dev_priv,
1076 			  enum i915_pipe pipe, bool state)
1077 {
1078 	int reg;
1079 	u32 val;
1080 	bool cur_state;
1081 	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
1082 								      pipe);
1083 
1084 	if (HAS_DDI(dev_priv->dev)) {
1085 		/* DDI does not have a specific FDI_TX register */
1086 		reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
1087 		val = I915_READ(reg);
1088 		cur_state = !!(val & TRANS_DDI_FUNC_ENABLE);
1089 	} else {
1090 		reg = FDI_TX_CTL(pipe);
1091 		val = I915_READ(reg);
1092 		cur_state = !!(val & FDI_TX_ENABLE);
1093 	}
1094 	WARN(cur_state != state,
1095 	     "FDI TX state assertion failure (expected %s, current %s)\n",
1096 	     state_string(state), state_string(cur_state));
1097 }
1098 #define assert_fdi_tx_enabled(d, p) assert_fdi_tx(d, p, true)
1099 #define assert_fdi_tx_disabled(d, p) assert_fdi_tx(d, p, false)
1100 
1101 static void assert_fdi_rx(struct drm_i915_private *dev_priv,
1102 			  enum i915_pipe pipe, bool state)
1103 {
1104 	int reg;
1105 	u32 val;
1106 	bool cur_state;
1107 
1108 	reg = FDI_RX_CTL(pipe);
1109 	val = I915_READ(reg);
1110 	cur_state = !!(val & FDI_RX_ENABLE);
1111 	WARN(cur_state != state,
1112 	     "FDI RX state assertion failure (expected %s, current %s)\n",
1113 	     state_string(state), state_string(cur_state));
1114 }
1115 #define assert_fdi_rx_enabled(d, p) assert_fdi_rx(d, p, true)
1116 #define assert_fdi_rx_disabled(d, p) assert_fdi_rx(d, p, false)
1117 
1118 static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
1119 				      enum i915_pipe pipe)
1120 {
1121 	int reg;
1122 	u32 val;
1123 
1124 	/* ILK FDI PLL is always enabled */
1125 	if (INTEL_INFO(dev_priv->dev)->gen == 5)
1126 		return;
1127 
1128 	/* On Haswell, DDI ports are responsible for the FDI PLL setup */
1129 	if (HAS_DDI(dev_priv->dev))
1130 		return;
1131 
1132 	reg = FDI_TX_CTL(pipe);
1133 	val = I915_READ(reg);
1134 	WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
1135 }
1136 
1137 void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
1138 		       enum i915_pipe pipe, bool state)
1139 {
1140 	int reg;
1141 	u32 val;
1142 	bool cur_state;
1143 
1144 	reg = FDI_RX_CTL(pipe);
1145 	val = I915_READ(reg);
1146 	cur_state = !!(val & FDI_RX_PLL_ENABLE);
1147 	WARN(cur_state != state,
1148 	     "FDI RX PLL assertion failure (expected %s, current %s)\n",
1149 	     state_string(state), state_string(cur_state));
1150 }
1151 
1152 static void assert_panel_unlocked(struct drm_i915_private *dev_priv,
1153 				  enum i915_pipe pipe)
1154 {
1155 	int pp_reg, lvds_reg;
1156 	u32 val;
1157 	enum i915_pipe panel_pipe = PIPE_A;
1158 	bool locked = true;
1159 
1160 	if (HAS_PCH_SPLIT(dev_priv->dev)) {
1161 		pp_reg = PCH_PP_CONTROL;
1162 		lvds_reg = PCH_LVDS;
1163 	} else {
1164 		pp_reg = PP_CONTROL;
1165 		lvds_reg = LVDS;
1166 	}
1167 
1168 	val = I915_READ(pp_reg);
1169 	if (!(val & PANEL_POWER_ON) ||
1170 	    ((val & PANEL_UNLOCK_REGS) == PANEL_UNLOCK_REGS))
1171 		locked = false;
1172 
1173 	if (I915_READ(lvds_reg) & LVDS_PIPEB_SELECT)
1174 		panel_pipe = PIPE_B;
1175 
1176 	WARN(panel_pipe == pipe && locked,
1177 	     "panel assertion failure, pipe %c regs locked\n",
1178 	     pipe_name(pipe));
1179 }
1180 
1181 static void assert_cursor(struct drm_i915_private *dev_priv,
1182 			  enum i915_pipe pipe, bool state)
1183 {
1184 	struct drm_device *dev = dev_priv->dev;
1185 	bool cur_state;
1186 
1187 	if (IS_845G(dev) || IS_I865G(dev))
1188 		cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE;
1189 	else
1190 		cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
1191 
1192 	WARN(cur_state != state,
1193 	     "cursor on pipe %c assertion failure (expected %s, current %s)\n",
1194 	     pipe_name(pipe), state_string(state), state_string(cur_state));
1195 }
1196 #define assert_cursor_enabled(d, p) assert_cursor(d, p, true)
1197 #define assert_cursor_disabled(d, p) assert_cursor(d, p, false)
1198 
1199 void assert_pipe(struct drm_i915_private *dev_priv,
1200 		 enum i915_pipe pipe, bool state)
1201 {
1202 	int reg;
1203 	u32 val;
1204 	bool cur_state;
1205 	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
1206 								      pipe);
1207 
1208 	/* if we need the pipe A quirk it must be always on */
1209 	if (pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE)
1210 		state = true;
1211 
1212 	if (!intel_display_power_enabled(dev_priv,
1213 				POWER_DOMAIN_TRANSCODER(cpu_transcoder))) {
1214 		cur_state = false;
1215 	} else {
1216 		reg = PIPECONF(cpu_transcoder);
1217 		val = I915_READ(reg);
1218 		cur_state = !!(val & PIPECONF_ENABLE);
1219 	}
1220 
1221 	WARN(cur_state != state,
1222 	     "pipe %c assertion failure (expected %s, current %s)\n",
1223 	     pipe_name(pipe), state_string(state), state_string(cur_state));
1224 }
1225 
1226 static void assert_plane(struct drm_i915_private *dev_priv,
1227 			 enum plane plane, bool state)
1228 {
1229 	int reg;
1230 	u32 val;
1231 	bool cur_state;
1232 
1233 	reg = DSPCNTR(plane);
1234 	val = I915_READ(reg);
1235 	cur_state = !!(val & DISPLAY_PLANE_ENABLE);
1236 	WARN(cur_state != state,
1237 	     "plane %c assertion failure (expected %s, current %s)\n",
1238 	     plane_name(plane), state_string(state), state_string(cur_state));
1239 }
1240 
1241 #define assert_plane_enabled(d, p) assert_plane(d, p, true)
1242 #define assert_plane_disabled(d, p) assert_plane(d, p, false)
1243 
1244 static void assert_planes_disabled(struct drm_i915_private *dev_priv,
1245 				   enum i915_pipe pipe)
1246 {
1247 	struct drm_device *dev = dev_priv->dev;
1248 	int reg, i;
1249 	u32 val;
1250 	int cur_pipe;
1251 
1252 	/* Primary planes are fixed to pipes on gen4+ */
1253 	if (INTEL_INFO(dev)->gen >= 4) {
1254 		reg = DSPCNTR(pipe);
1255 		val = I915_READ(reg);
1256 		WARN(val & DISPLAY_PLANE_ENABLE,
1257 		     "plane %c assertion failure, should be disabled but not\n",
1258 		     plane_name(pipe));
1259 		return;
1260 	}
1261 
1262 	/* Need to check both planes against the pipe */
1263 	for_each_pipe(i) {
1264 		reg = DSPCNTR(i);
1265 		val = I915_READ(reg);
1266 		cur_pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
1267 			DISPPLANE_SEL_PIPE_SHIFT;
1268 		WARN((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe,
1269 		     "plane %c assertion failure, should be off on pipe %c but is still active\n",
1270 		     plane_name(i), pipe_name(pipe));
1271 	}
1272 }
1273 
1274 static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
1275 				    enum i915_pipe pipe)
1276 {
1277 	struct drm_device *dev = dev_priv->dev;
1278 	int reg, sprite;
1279 	u32 val;
1280 
1281 	if (IS_VALLEYVIEW(dev)) {
1282 		for_each_sprite(pipe, sprite) {
1283 			reg = SPCNTR(pipe, sprite);
1284 			val = I915_READ(reg);
1285 			WARN(val & SP_ENABLE,
1286 			     "sprite %c assertion failure, should be off on pipe %c but is still active\n",
1287 			     sprite_name(pipe, sprite), pipe_name(pipe));
1288 		}
1289 	} else if (INTEL_INFO(dev)->gen >= 7) {
1290 		reg = SPRCTL(pipe);
1291 		val = I915_READ(reg);
1292 		WARN(val & SPRITE_ENABLE,
1293 		     "sprite %c assertion failure, should be off on pipe %c but is still active\n",
1294 		     plane_name(pipe), pipe_name(pipe));
1295 	} else if (INTEL_INFO(dev)->gen >= 5) {
1296 		reg = DVSCNTR(pipe);
1297 		val = I915_READ(reg);
1298 		WARN(val & DVS_ENABLE,
1299 		     "sprite %c assertion failure, should be off on pipe %c but is still active\n",
1300 		     plane_name(pipe), pipe_name(pipe));
1301 	}
1302 }
1303 
1304 static void ibx_assert_pch_refclk_enabled(struct drm_i915_private *dev_priv)
1305 {
1306 	u32 val;
1307 	bool enabled;
1308 
1309 	WARN_ON(!(HAS_PCH_IBX(dev_priv->dev) || HAS_PCH_CPT(dev_priv->dev)));
1310 
1311 	val = I915_READ(PCH_DREF_CONTROL);
1312 	enabled = !!(val & (DREF_SSC_SOURCE_MASK | DREF_NONSPREAD_SOURCE_MASK |
1313 			    DREF_SUPERSPREAD_SOURCE_MASK));
1314 	WARN(!enabled, "PCH refclk assertion failure, should be active but is disabled\n");
1315 }
1316 
1317 static void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
1318 					   enum i915_pipe pipe)
1319 {
1320 	int reg;
1321 	u32 val;
1322 	bool enabled;
1323 
1324 	reg = PCH_TRANSCONF(pipe);
1325 	val = I915_READ(reg);
1326 	enabled = !!(val & TRANS_ENABLE);
1327 	WARN(enabled,
1328 	     "transcoder assertion failed, should be off on pipe %c but is still active\n",
1329 	     pipe_name(pipe));
1330 }
1331 
1332 static bool dp_pipe_enabled(struct drm_i915_private *dev_priv,
1333 			    enum i915_pipe pipe, u32 port_sel, u32 val)
1334 {
1335 	if ((val & DP_PORT_EN) == 0)
1336 		return false;
1337 
1338 	if (HAS_PCH_CPT(dev_priv->dev)) {
1339 		u32	trans_dp_ctl_reg = TRANS_DP_CTL(pipe);
1340 		u32	trans_dp_ctl = I915_READ(trans_dp_ctl_reg);
1341 		if ((trans_dp_ctl & TRANS_DP_PORT_SEL_MASK) != port_sel)
1342 			return false;
1343 	} else if (IS_CHERRYVIEW(dev_priv->dev)) {
1344 		if ((val & DP_PIPE_MASK_CHV) != DP_PIPE_SELECT_CHV(pipe))
1345 			return false;
1346 	} else {
1347 		if ((val & DP_PIPE_MASK) != (pipe << 30))
1348 			return false;
1349 	}
1350 	return true;
1351 }
1352 
1353 static bool hdmi_pipe_enabled(struct drm_i915_private *dev_priv,
1354 			      enum i915_pipe pipe, u32 val)
1355 {
1356 	if ((val & SDVO_ENABLE) == 0)
1357 		return false;
1358 
1359 	if (HAS_PCH_CPT(dev_priv->dev)) {
1360 		if ((val & SDVO_PIPE_SEL_MASK_CPT) != SDVO_PIPE_SEL_CPT(pipe))
1361 			return false;
1362 	} else if (IS_CHERRYVIEW(dev_priv->dev)) {
1363 		if ((val & SDVO_PIPE_SEL_MASK_CHV) != SDVO_PIPE_SEL_CHV(pipe))
1364 			return false;
1365 	} else {
1366 		if ((val & SDVO_PIPE_SEL_MASK) != SDVO_PIPE_SEL(pipe))
1367 			return false;
1368 	}
1369 	return true;
1370 }
1371 
1372 static bool lvds_pipe_enabled(struct drm_i915_private *dev_priv,
1373 			      enum i915_pipe pipe, u32 val)
1374 {
1375 	if ((val & LVDS_PORT_EN) == 0)
1376 		return false;
1377 
1378 	if (HAS_PCH_CPT(dev_priv->dev)) {
1379 		if ((val & PORT_TRANS_SEL_MASK) != PORT_TRANS_SEL_CPT(pipe))
1380 			return false;
1381 	} else {
1382 		if ((val & LVDS_PIPE_MASK) != LVDS_PIPE(pipe))
1383 			return false;
1384 	}
1385 	return true;
1386 }
1387 
1388 static bool adpa_pipe_enabled(struct drm_i915_private *dev_priv,
1389 			      enum i915_pipe pipe, u32 val)
1390 {
1391 	if ((val & ADPA_DAC_ENABLE) == 0)
1392 		return false;
1393 	if (HAS_PCH_CPT(dev_priv->dev)) {
1394 		if ((val & PORT_TRANS_SEL_MASK) != PORT_TRANS_SEL_CPT(pipe))
1395 			return false;
1396 	} else {
1397 		if ((val & ADPA_PIPE_SELECT_MASK) != ADPA_PIPE_SELECT(pipe))
1398 			return false;
1399 	}
1400 	return true;
1401 }
1402 
1403 static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
1404 				   enum i915_pipe pipe, int reg, u32 port_sel)
1405 {
1406 	u32 val = I915_READ(reg);
1407 	WARN(dp_pipe_enabled(dev_priv, pipe, port_sel, val),
1408 	     "PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
1409 	     reg, pipe_name(pipe));
1410 
1411 	WARN(HAS_PCH_IBX(dev_priv->dev) && (val & DP_PORT_EN) == 0
1412 	     && (val & DP_PIPEB_SELECT),
1413 	     "IBX PCH dp port still using transcoder B\n");
1414 }
1415 
1416 static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
1417 				     enum i915_pipe pipe, int reg)
1418 {
1419 	u32 val = I915_READ(reg);
1420 	WARN(hdmi_pipe_enabled(dev_priv, pipe, val),
1421 	     "PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
1422 	     reg, pipe_name(pipe));
1423 
1424 	WARN(HAS_PCH_IBX(dev_priv->dev) && (val & SDVO_ENABLE) == 0
1425 	     && (val & SDVO_PIPE_B_SELECT),
1426 	     "IBX PCH hdmi port still using transcoder B\n");
1427 }
1428 
1429 static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
1430 				      enum i915_pipe pipe)
1431 {
1432 	int reg;
1433 	u32 val;
1434 
1435 	assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_B, TRANS_DP_PORT_SEL_B);
1436 	assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_C, TRANS_DP_PORT_SEL_C);
1437 	assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_D, TRANS_DP_PORT_SEL_D);
1438 
1439 	reg = PCH_ADPA;
1440 	val = I915_READ(reg);
1441 	WARN(adpa_pipe_enabled(dev_priv, pipe, val),
1442 	     "PCH VGA enabled on transcoder %c, should be disabled\n",
1443 	     pipe_name(pipe));
1444 
1445 	reg = PCH_LVDS;
1446 	val = I915_READ(reg);
1447 	WARN(lvds_pipe_enabled(dev_priv, pipe, val),
1448 	     "PCH LVDS enabled on transcoder %c, should be disabled\n",
1449 	     pipe_name(pipe));
1450 
1451 	assert_pch_hdmi_disabled(dev_priv, pipe, PCH_HDMIB);
1452 	assert_pch_hdmi_disabled(dev_priv, pipe, PCH_HDMIC);
1453 	assert_pch_hdmi_disabled(dev_priv, pipe, PCH_HDMID);
1454 }
1455 
1456 static void intel_init_dpio(struct drm_device *dev)
1457 {
1458 	struct drm_i915_private *dev_priv = dev->dev_private;
1459 
1460 	if (!IS_VALLEYVIEW(dev))
1461 		return;
1462 
1463 	/*
1464 	 * IOSF_PORT_DPIO is used for VLV x2 PHY (DP/HDMI B and C),
1465 	 * CHV x1 PHY (DP/HDMI D)
1466 	 * IOSF_PORT_DPIO_2 is used for CHV x2 PHY (DP/HDMI B and C)
1467 	 */
1468 	if (IS_CHERRYVIEW(dev)) {
1469 		DPIO_PHY_IOSF_PORT(DPIO_PHY0) = IOSF_PORT_DPIO_2;
1470 		DPIO_PHY_IOSF_PORT(DPIO_PHY1) = IOSF_PORT_DPIO;
1471 	} else {
1472 		DPIO_PHY_IOSF_PORT(DPIO_PHY0) = IOSF_PORT_DPIO;
1473 	}
1474 }
1475 
1476 static void intel_reset_dpio(struct drm_device *dev)
1477 {
1478 	struct drm_i915_private *dev_priv = dev->dev_private;
1479 
1480 	if (!IS_VALLEYVIEW(dev))
1481 		return;
1482 
1483 	if (IS_CHERRYVIEW(dev)) {
1484 		enum dpio_phy phy;
1485 		u32 val;
1486 
1487 		for (phy = DPIO_PHY0; phy < I915_NUM_PHYS_VLV; phy++) {
1488 			/* Poll for phypwrgood signal */
1489 			if (wait_for(I915_READ(DISPLAY_PHY_STATUS) &
1490 						PHY_POWERGOOD(phy), 1))
1491 				DRM_ERROR("Display PHY %d is not power up\n", phy);
1492 
1493 			/*
1494 			 * Deassert common lane reset for PHY.
1495 			 *
1496 			 * This should only be done on init and resume from S3
1497 			 * with both PLLs disabled, or we risk losing DPIO and
1498 			 * PLL synchronization.
1499 			 */
1500 			val = I915_READ(DISPLAY_PHY_CONTROL);
1501 			I915_WRITE(DISPLAY_PHY_CONTROL,
1502 				PHY_COM_LANE_RESET_DEASSERT(phy, val));
1503 		}
1504 
1505 	} else {
1506 		/*
1507 		 * If DPIO has already been reset, e.g. by BIOS, just skip all
1508 		 * this.
1509 		 */
1510 		if (I915_READ(DPIO_CTL) & DPIO_CMNRST)
1511 			return;
1512 
1513 		/*
1514 		 * From VLV2A0_DP_eDP_HDMI_DPIO_driver_vbios_notes_11.docx:
1515 		 * Need to assert and de-assert PHY SB reset by gating the
1516 		 * common lane power, then un-gating it.
1517 		 * Simply ungating isn't enough to reset the PHY enough to get
1518 		 * ports and lanes running.
1519 		 */
1520 		__vlv_set_power_well(dev_priv, PUNIT_POWER_WELL_DPIO_CMN_BC,
1521 				     false);
1522 		__vlv_set_power_well(dev_priv, PUNIT_POWER_WELL_DPIO_CMN_BC,
1523 				     true);
1524 	}
1525 }
1526 
1527 static void vlv_enable_pll(struct intel_crtc *crtc)
1528 {
1529 	struct drm_device *dev = crtc->base.dev;
1530 	struct drm_i915_private *dev_priv = dev->dev_private;
1531 	int reg = DPLL(crtc->pipe);
1532 	u32 dpll = crtc->config.dpll_hw_state.dpll;
1533 
1534 	assert_pipe_disabled(dev_priv, crtc->pipe);
1535 
1536 	/* No really, not for ILK+ */
1537 	BUG_ON(!IS_VALLEYVIEW(dev_priv->dev));
1538 
1539 	/* PLL is protected by panel, make sure we can write it */
1540 	if (IS_MOBILE(dev_priv->dev) && !IS_I830(dev_priv->dev))
1541 		assert_panel_unlocked(dev_priv, crtc->pipe);
1542 
1543 	I915_WRITE(reg, dpll);
1544 	POSTING_READ(reg);
1545 	udelay(150);
1546 
1547 	if (wait_for(((I915_READ(reg) & DPLL_LOCK_VLV) == DPLL_LOCK_VLV), 1))
1548 		DRM_ERROR("DPLL %d failed to lock\n", crtc->pipe);
1549 
1550 	I915_WRITE(DPLL_MD(crtc->pipe), crtc->config.dpll_hw_state.dpll_md);
1551 	POSTING_READ(DPLL_MD(crtc->pipe));
1552 
1553 	/* We do this three times for luck */
1554 	I915_WRITE(reg, dpll);
1555 	POSTING_READ(reg);
1556 	udelay(150); /* wait for warmup */
1557 	I915_WRITE(reg, dpll);
1558 	POSTING_READ(reg);
1559 	udelay(150); /* wait for warmup */
1560 	I915_WRITE(reg, dpll);
1561 	POSTING_READ(reg);
1562 	udelay(150); /* wait for warmup */
1563 }
1564 
1565 static void chv_enable_pll(struct intel_crtc *crtc)
1566 {
1567 	struct drm_device *dev = crtc->base.dev;
1568 	struct drm_i915_private *dev_priv = dev->dev_private;
1569 	int pipe = crtc->pipe;
1570 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
1571 	u32 tmp;
1572 
1573 	assert_pipe_disabled(dev_priv, crtc->pipe);
1574 
1575 	BUG_ON(!IS_CHERRYVIEW(dev_priv->dev));
1576 
1577 	mutex_lock(&dev_priv->dpio_lock);
1578 
1579 	/* Enable back the 10bit clock to display controller */
1580 	tmp = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port));
1581 	tmp |= DPIO_DCLKP_EN;
1582 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), tmp);
1583 
1584 	/*
1585 	 * Need to wait > 100ns between dclkp clock enable bit and PLL enable.
1586 	 */
1587 	udelay(1);
1588 
1589 	/* Enable PLL */
1590 	I915_WRITE(DPLL(pipe), crtc->config.dpll_hw_state.dpll);
1591 
1592 	/* Check PLL is locked */
1593 	if (wait_for(((I915_READ(DPLL(pipe)) & DPLL_LOCK_VLV) == DPLL_LOCK_VLV), 1))
1594 		DRM_ERROR("PLL %d failed to lock\n", pipe);
1595 
1596 	/* not sure when this should be written */
1597 	I915_WRITE(DPLL_MD(pipe), crtc->config.dpll_hw_state.dpll_md);
1598 	POSTING_READ(DPLL_MD(pipe));
1599 
1600 	mutex_unlock(&dev_priv->dpio_lock);
1601 }
1602 
1603 static void i9xx_enable_pll(struct intel_crtc *crtc)
1604 {
1605 	struct drm_device *dev = crtc->base.dev;
1606 	struct drm_i915_private *dev_priv = dev->dev_private;
1607 	int reg = DPLL(crtc->pipe);
1608 	u32 dpll = crtc->config.dpll_hw_state.dpll;
1609 
1610 	assert_pipe_disabled(dev_priv, crtc->pipe);
1611 
1612 	/* No really, not for ILK+ */
1613 	BUG_ON(INTEL_INFO(dev)->gen >= 5);
1614 
1615 	/* PLL is protected by panel, make sure we can write it */
1616 	if (IS_MOBILE(dev) && !IS_I830(dev))
1617 		assert_panel_unlocked(dev_priv, crtc->pipe);
1618 
1619 	I915_WRITE(reg, dpll);
1620 
1621 	/* Wait for the clocks to stabilize. */
1622 	POSTING_READ(reg);
1623 	udelay(150);
1624 
1625 	if (INTEL_INFO(dev)->gen >= 4) {
1626 		I915_WRITE(DPLL_MD(crtc->pipe),
1627 			   crtc->config.dpll_hw_state.dpll_md);
1628 	} else {
1629 		/* The pixel multiplier can only be updated once the
1630 		 * DPLL is enabled and the clocks are stable.
1631 		 *
1632 		 * So write it again.
1633 		 */
1634 		I915_WRITE(reg, dpll);
1635 	}
1636 
1637 	/* We do this three times for luck */
1638 	I915_WRITE(reg, dpll);
1639 	POSTING_READ(reg);
1640 	udelay(150); /* wait for warmup */
1641 	I915_WRITE(reg, dpll);
1642 	POSTING_READ(reg);
1643 	udelay(150); /* wait for warmup */
1644 	I915_WRITE(reg, dpll);
1645 	POSTING_READ(reg);
1646 	udelay(150); /* wait for warmup */
1647 }
1648 
1649 /**
1650  * i9xx_disable_pll - disable a PLL
1651  * @dev_priv: i915 private structure
1652  * @pipe: pipe PLL to disable
1653  *
1654  * Disable the PLL for @pipe, making sure the pipe is off first.
1655  *
1656  * Note!  This is for pre-ILK only.
1657  */
1658 static void i9xx_disable_pll(struct drm_i915_private *dev_priv, enum i915_pipe pipe)
1659 {
1660 	/* Don't disable pipe A or pipe A PLLs if needed */
1661 	if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
1662 		return;
1663 
1664 	/* Make sure the pipe isn't still relying on us */
1665 	assert_pipe_disabled(dev_priv, pipe);
1666 
1667 	I915_WRITE(DPLL(pipe), 0);
1668 	POSTING_READ(DPLL(pipe));
1669 }
1670 
1671 static void vlv_disable_pll(struct drm_i915_private *dev_priv, enum i915_pipe pipe)
1672 {
1673 	u32 val = 0;
1674 
1675 	/* Make sure the pipe isn't still relying on us */
1676 	assert_pipe_disabled(dev_priv, pipe);
1677 
1678 	/*
1679 	 * Leave integrated clock source and reference clock enabled for pipe B.
1680 	 * The latter is needed for VGA hotplug / manual detection.
1681 	 */
1682 	if (pipe == PIPE_B)
1683 		val = DPLL_INTEGRATED_CRI_CLK_VLV | DPLL_REFA_CLK_ENABLE_VLV;
1684 	I915_WRITE(DPLL(pipe), val);
1685 	POSTING_READ(DPLL(pipe));
1686 
1687 }
1688 
1689 static void chv_disable_pll(struct drm_i915_private *dev_priv, enum i915_pipe pipe)
1690 {
1691 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
1692 	u32 val;
1693 
1694 	/* Make sure the pipe isn't still relying on us */
1695 	assert_pipe_disabled(dev_priv, pipe);
1696 
1697 	/* Set PLL en = 0 */
1698 	val = DPLL_SSC_REF_CLOCK_CHV;
1699 	if (pipe != PIPE_A)
1700 		val |= DPLL_INTEGRATED_CRI_CLK_VLV;
1701 	I915_WRITE(DPLL(pipe), val);
1702 	POSTING_READ(DPLL(pipe));
1703 
1704 	mutex_lock(&dev_priv->dpio_lock);
1705 
1706 	/* Disable 10bit clock to display controller */
1707 	val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port));
1708 	val &= ~DPIO_DCLKP_EN;
1709 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), val);
1710 
1711 	mutex_unlock(&dev_priv->dpio_lock);
1712 }
1713 
1714 void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
1715 		struct intel_digital_port *dport)
1716 {
1717 	u32 port_mask;
1718 	int dpll_reg;
1719 
1720 	switch (dport->port) {
1721 	case PORT_B:
1722 		port_mask = DPLL_PORTB_READY_MASK;
1723 		dpll_reg = DPLL(0);
1724 		break;
1725 	case PORT_C:
1726 		port_mask = DPLL_PORTC_READY_MASK;
1727 		dpll_reg = DPLL(0);
1728 		break;
1729 	case PORT_D:
1730 		port_mask = DPLL_PORTD_READY_MASK;
1731 		dpll_reg = DPIO_PHY_STATUS;
1732 		break;
1733 	default:
1734 		BUG();
1735 	}
1736 
1737 	if (wait_for((I915_READ(dpll_reg) & port_mask) == 0, 1000))
1738 		WARN(1, "timed out waiting for port %c ready: 0x%08x\n",
1739 		     port_name(dport->port), I915_READ(dpll_reg));
1740 }
1741 
1742 static void intel_prepare_shared_dpll(struct intel_crtc *crtc)
1743 {
1744 	struct drm_device *dev = crtc->base.dev;
1745 	struct drm_i915_private *dev_priv = dev->dev_private;
1746 	struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
1747 
1748 	WARN_ON(!pll->refcount);
1749 	if (pll->active == 0) {
1750 		DRM_DEBUG_DRIVER("setting up %s\n", pll->name);
1751 		WARN_ON(pll->on);
1752 		assert_shared_dpll_disabled(dev_priv, pll);
1753 
1754 		pll->mode_set(dev_priv, pll);
1755 	}
1756 }
1757 
1758 /**
1759  * intel_enable_shared_dpll - enable PCH PLL
1760  * @dev_priv: i915 private structure
1761  * @pipe: pipe PLL to enable
1762  *
1763  * The PCH PLL needs to be enabled before the PCH transcoder, since it
1764  * drives the transcoder clock.
1765  */
1766 static void intel_enable_shared_dpll(struct intel_crtc *crtc)
1767 {
1768 	struct drm_device *dev = crtc->base.dev;
1769 	struct drm_i915_private *dev_priv = dev->dev_private;
1770 	struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
1771 
1772 	if (WARN_ON(pll == NULL))
1773 		return;
1774 
1775 	if (WARN_ON(pll->refcount == 0))
1776 		return;
1777 
1778 	DRM_DEBUG_KMS("enable %s (active %d, on? %d)for crtc %d\n",
1779 		      pll->name, pll->active, pll->on,
1780 		      crtc->base.base.id);
1781 
1782 	if (pll->active++) {
1783 		WARN_ON(!pll->on);
1784 		assert_shared_dpll_enabled(dev_priv, pll);
1785 		return;
1786 	}
1787 	WARN_ON(pll->on);
1788 
1789 	DRM_DEBUG_KMS("enabling %s\n", pll->name);
1790 	pll->enable(dev_priv, pll);
1791 	pll->on = true;
1792 }
1793 
1794 static void intel_disable_shared_dpll(struct intel_crtc *crtc)
1795 {
1796 	struct drm_device *dev = crtc->base.dev;
1797 	struct drm_i915_private *dev_priv = dev->dev_private;
1798 	struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
1799 
1800 	/* PCH only available on ILK+ */
1801 	BUG_ON(INTEL_INFO(dev)->gen < 5);
1802 	if (WARN_ON(pll == NULL))
1803 	       return;
1804 
1805 	if (WARN_ON(pll->refcount == 0))
1806 		return;
1807 
1808 	DRM_DEBUG_KMS("disable %s (active %d, on? %d) for crtc %d\n",
1809 		      pll->name, pll->active, pll->on,
1810 		      crtc->base.base.id);
1811 
1812 	if (WARN_ON(pll->active == 0)) {
1813 		assert_shared_dpll_disabled(dev_priv, pll);
1814 		return;
1815 	}
1816 
1817 	assert_shared_dpll_enabled(dev_priv, pll);
1818 	WARN_ON(!pll->on);
1819 	if (--pll->active)
1820 		return;
1821 
1822 	DRM_DEBUG_KMS("disabling %s\n", pll->name);
1823 	pll->disable(dev_priv, pll);
1824 	pll->on = false;
1825 }
1826 
1827 static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
1828 					   enum i915_pipe pipe)
1829 {
1830 	struct drm_device *dev = dev_priv->dev;
1831 	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
1832 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1833 	uint32_t reg, val, pipeconf_val;
1834 
1835 	/* PCH only available on ILK+ */
1836 	BUG_ON(INTEL_INFO(dev)->gen < 5);
1837 
1838 	/* Make sure PCH DPLL is enabled */
1839 	assert_shared_dpll_enabled(dev_priv,
1840 				   intel_crtc_to_shared_dpll(intel_crtc));
1841 
1842 	/* FDI must be feeding us bits for PCH ports */
1843 	assert_fdi_tx_enabled(dev_priv, pipe);
1844 	assert_fdi_rx_enabled(dev_priv, pipe);
1845 
1846 	if (HAS_PCH_CPT(dev)) {
1847 		/* Workaround: Set the timing override bit before enabling the
1848 		 * pch transcoder. */
1849 		reg = TRANS_CHICKEN2(pipe);
1850 		val = I915_READ(reg);
1851 		val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
1852 		I915_WRITE(reg, val);
1853 	}
1854 
1855 	reg = PCH_TRANSCONF(pipe);
1856 	val = I915_READ(reg);
1857 	pipeconf_val = I915_READ(PIPECONF(pipe));
1858 
1859 	if (HAS_PCH_IBX(dev_priv->dev)) {
1860 		/*
1861 		 * make the BPC in transcoder be consistent with
1862 		 * that in pipeconf reg.
1863 		 */
1864 		val &= ~PIPECONF_BPC_MASK;
1865 		val |= pipeconf_val & PIPECONF_BPC_MASK;
1866 	}
1867 
1868 	val &= ~TRANS_INTERLACE_MASK;
1869 	if ((pipeconf_val & PIPECONF_INTERLACE_MASK) == PIPECONF_INTERLACED_ILK)
1870 		if (HAS_PCH_IBX(dev_priv->dev) &&
1871 		    intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO))
1872 			val |= TRANS_LEGACY_INTERLACED_ILK;
1873 		else
1874 			val |= TRANS_INTERLACED;
1875 	else
1876 		val |= TRANS_PROGRESSIVE;
1877 
1878 	I915_WRITE(reg, val | TRANS_ENABLE);
1879 	if (wait_for(I915_READ(reg) & TRANS_STATE_ENABLE, 100))
1880 		DRM_ERROR("failed to enable transcoder %c\n", pipe_name(pipe));
1881 }
1882 
1883 static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
1884 				      enum transcoder cpu_transcoder)
1885 {
1886 	u32 val, pipeconf_val;
1887 
1888 	/* PCH only available on ILK+ */
1889 	BUG_ON(INTEL_INFO(dev_priv->dev)->gen < 5);
1890 
1891 	/* FDI must be feeding us bits for PCH ports */
1892 	assert_fdi_tx_enabled(dev_priv, (enum i915_pipe) cpu_transcoder);
1893 	assert_fdi_rx_enabled(dev_priv, TRANSCODER_A);
1894 
1895 	/* Workaround: set timing override bit. */
1896 	val = I915_READ(_TRANSA_CHICKEN2);
1897 	val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
1898 	I915_WRITE(_TRANSA_CHICKEN2, val);
1899 
1900 	val = TRANS_ENABLE;
1901 	pipeconf_val = I915_READ(PIPECONF(cpu_transcoder));
1902 
1903 	if ((pipeconf_val & PIPECONF_INTERLACE_MASK_HSW) ==
1904 	    PIPECONF_INTERLACED_ILK)
1905 		val |= TRANS_INTERLACED;
1906 	else
1907 		val |= TRANS_PROGRESSIVE;
1908 
1909 	I915_WRITE(LPT_TRANSCONF, val);
1910 	if (wait_for(I915_READ(LPT_TRANSCONF) & TRANS_STATE_ENABLE, 100))
1911 		DRM_ERROR("Failed to enable PCH transcoder\n");
1912 }
1913 
1914 static void ironlake_disable_pch_transcoder(struct drm_i915_private *dev_priv,
1915 					    enum i915_pipe pipe)
1916 {
1917 	struct drm_device *dev = dev_priv->dev;
1918 	uint32_t reg, val;
1919 
1920 	/* FDI relies on the transcoder */
1921 	assert_fdi_tx_disabled(dev_priv, pipe);
1922 	assert_fdi_rx_disabled(dev_priv, pipe);
1923 
1924 	/* Ports must be off as well */
1925 	assert_pch_ports_disabled(dev_priv, pipe);
1926 
1927 	reg = PCH_TRANSCONF(pipe);
1928 	val = I915_READ(reg);
1929 	val &= ~TRANS_ENABLE;
1930 	I915_WRITE(reg, val);
1931 	/* wait for PCH transcoder off, transcoder state */
1932 	if (wait_for((I915_READ(reg) & TRANS_STATE_ENABLE) == 0, 50))
1933 		DRM_ERROR("failed to disable transcoder %c\n", pipe_name(pipe));
1934 
1935 	if (!HAS_PCH_IBX(dev)) {
1936 		/* Workaround: Clear the timing override chicken bit again. */
1937 		reg = TRANS_CHICKEN2(pipe);
1938 		val = I915_READ(reg);
1939 		val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
1940 		I915_WRITE(reg, val);
1941 	}
1942 }
1943 
1944 static void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv)
1945 {
1946 	u32 val;
1947 
1948 	val = I915_READ(LPT_TRANSCONF);
1949 	val &= ~TRANS_ENABLE;
1950 	I915_WRITE(LPT_TRANSCONF, val);
1951 	/* wait for PCH transcoder off, transcoder state */
1952 	if (wait_for((I915_READ(LPT_TRANSCONF) & TRANS_STATE_ENABLE) == 0, 50))
1953 		DRM_ERROR("Failed to disable PCH transcoder\n");
1954 
1955 	/* Workaround: clear timing override bit. */
1956 	val = I915_READ(_TRANSA_CHICKEN2);
1957 	val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
1958 	I915_WRITE(_TRANSA_CHICKEN2, val);
1959 }
1960 
1961 /**
1962  * intel_enable_pipe - enable a pipe, asserting requirements
1963  * @crtc: crtc responsible for the pipe
1964  *
1965  * Enable @crtc's pipe, making sure that various hardware specific requirements
1966  * are met, if applicable, e.g. PLL enabled, LVDS pairs enabled, etc.
1967  */
1968 static void intel_enable_pipe(struct intel_crtc *crtc)
1969 {
1970 	struct drm_device *dev = crtc->base.dev;
1971 	struct drm_i915_private *dev_priv = dev->dev_private;
1972 	enum i915_pipe pipe = crtc->pipe;
1973 	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
1974 								      pipe);
1975 	enum i915_pipe pch_transcoder;
1976 	int reg;
1977 	u32 val;
1978 
1979 	assert_planes_disabled(dev_priv, pipe);
1980 	assert_cursor_disabled(dev_priv, pipe);
1981 	assert_sprites_disabled(dev_priv, pipe);
1982 
1983 	if (HAS_PCH_LPT(dev_priv->dev))
1984 		pch_transcoder = TRANSCODER_A;
1985 	else
1986 		pch_transcoder = pipe;
1987 
1988 	/*
1989 	 * A pipe without a PLL won't actually be able to drive bits from
1990 	 * a plane.  On ILK+ the pipe PLLs are integrated, so we don't
1991 	 * need the check.
1992 	 */
1993 	if (!HAS_PCH_SPLIT(dev_priv->dev))
1994 		if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_DSI))
1995 			assert_dsi_pll_enabled(dev_priv);
1996 		else
1997 			assert_pll_enabled(dev_priv, pipe);
1998 	else {
1999 		if (crtc->config.has_pch_encoder) {
2000 			/* if driving the PCH, we need FDI enabled */
2001 			assert_fdi_rx_pll_enabled(dev_priv, pch_transcoder);
2002 			assert_fdi_tx_pll_enabled(dev_priv,
2003 						  (enum i915_pipe) cpu_transcoder);
2004 		}
2005 		/* FIXME: assert CPU port conditions for SNB+ */
2006 	}
2007 
2008 	reg = PIPECONF(cpu_transcoder);
2009 	val = I915_READ(reg);
2010 	if (val & PIPECONF_ENABLE) {
2011 		WARN_ON(!(pipe == PIPE_A &&
2012 			  dev_priv->quirks & QUIRK_PIPEA_FORCE));
2013 		return;
2014 	}
2015 
2016 	I915_WRITE(reg, val | PIPECONF_ENABLE);
2017 	POSTING_READ(reg);
2018 }
2019 
2020 /**
2021  * intel_disable_pipe - disable a pipe, asserting requirements
2022  * @dev_priv: i915 private structure
2023  * @pipe: pipe to disable
2024  *
2025  * Disable @pipe, making sure that various hardware specific requirements
2026  * are met, if applicable, e.g. plane disabled, panel fitter off, etc.
2027  *
2028  * @pipe should be %PIPE_A or %PIPE_B.
2029  *
2030  * Will wait until the pipe has shut down before returning.
2031  */
2032 static void intel_disable_pipe(struct drm_i915_private *dev_priv,
2033 			       enum i915_pipe pipe)
2034 {
2035 	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
2036 								      pipe);
2037 	int reg;
2038 	u32 val;
2039 
2040 	/*
2041 	 * Make sure planes won't keep trying to pump pixels to us,
2042 	 * or we might hang the display.
2043 	 */
2044 	assert_planes_disabled(dev_priv, pipe);
2045 	assert_cursor_disabled(dev_priv, pipe);
2046 	assert_sprites_disabled(dev_priv, pipe);
2047 
2048 	/* Don't disable pipe A or pipe A PLLs if needed */
2049 	if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
2050 		return;
2051 
2052 	reg = PIPECONF(cpu_transcoder);
2053 	val = I915_READ(reg);
2054 	if ((val & PIPECONF_ENABLE) == 0)
2055 		return;
2056 
2057 	I915_WRITE(reg, val & ~PIPECONF_ENABLE);
2058 	intel_wait_for_pipe_off(dev_priv->dev, pipe);
2059 }
2060 
2061 /*
2062  * Plane regs are double buffered, going from enabled->disabled needs a
2063  * trigger in order to latch.  The display address reg provides this.
2064  */
2065 void intel_flush_primary_plane(struct drm_i915_private *dev_priv,
2066 			       enum plane plane)
2067 {
2068 	struct drm_device *dev = dev_priv->dev;
2069 	u32 reg = INTEL_INFO(dev)->gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
2070 
2071 	I915_WRITE(reg, I915_READ(reg));
2072 	POSTING_READ(reg);
2073 }
2074 
2075 /**
2076  * intel_enable_primary_hw_plane - enable the primary plane on a given pipe
2077  * @dev_priv: i915 private structure
2078  * @plane: plane to enable
2079  * @pipe: pipe being fed
2080  *
2081  * Enable @plane on @pipe, making sure that @pipe is running first.
2082  */
2083 static void intel_enable_primary_hw_plane(struct drm_i915_private *dev_priv,
2084 					  enum plane plane, enum i915_pipe pipe)
2085 {
2086 	struct drm_device *dev = dev_priv->dev;
2087 	struct intel_crtc *intel_crtc =
2088 		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
2089 	int reg;
2090 	u32 val;
2091 
2092 	/* If the pipe isn't enabled, we can't pump pixels and may hang */
2093 	assert_pipe_enabled(dev_priv, pipe);
2094 
2095 	if (intel_crtc->primary_enabled)
2096 		return;
2097 
2098 	intel_crtc->primary_enabled = true;
2099 
2100 	reg = DSPCNTR(plane);
2101 	val = I915_READ(reg);
2102 	WARN_ON(val & DISPLAY_PLANE_ENABLE);
2103 
2104 	I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE);
2105 	intel_flush_primary_plane(dev_priv, plane);
2106 
2107 	/*
2108 	 * BDW signals flip done immediately if the plane
2109 	 * is disabled, even if the plane enable is already
2110 	 * armed to occur at the next vblank :(
2111 	 */
2112 	if (IS_BROADWELL(dev))
2113 		intel_wait_for_vblank(dev, intel_crtc->pipe);
2114 }
2115 
2116 /**
2117  * intel_disable_primary_hw_plane - disable the primary hardware plane
2118  * @dev_priv: i915 private structure
2119  * @plane: plane to disable
2120  * @pipe: pipe consuming the data
2121  *
2122  * Disable @plane; should be an independent operation.
2123  */
2124 static void intel_disable_primary_hw_plane(struct drm_i915_private *dev_priv,
2125 					   enum plane plane, enum i915_pipe pipe)
2126 {
2127 	struct intel_crtc *intel_crtc =
2128 		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
2129 	int reg;
2130 	u32 val;
2131 
2132 	if (!intel_crtc->primary_enabled)
2133 		return;
2134 
2135 	intel_crtc->primary_enabled = false;
2136 
2137 	reg = DSPCNTR(plane);
2138 	val = I915_READ(reg);
2139 	WARN_ON((val & DISPLAY_PLANE_ENABLE) == 0);
2140 
2141 	I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE);
2142 	intel_flush_primary_plane(dev_priv, plane);
2143 }
2144 
2145 static bool need_vtd_wa(struct drm_device *dev)
2146 {
2147 #ifdef CONFIG_INTEL_IOMMU
2148 	if (INTEL_INFO(dev)->gen >= 6 && intel_iommu_gfx_mapped)
2149 		return true;
2150 #endif
2151 	return false;
2152 }
2153 
2154 static int intel_align_height(struct drm_device *dev, int height, bool tiled)
2155 {
2156 	int tile_height;
2157 
2158 	tile_height = tiled ? (IS_GEN2(dev) ? 16 : 8) : 1;
2159 	return ALIGN(height, tile_height);
2160 }
2161 
2162 int
2163 intel_pin_and_fence_fb_obj(struct drm_device *dev,
2164 			   struct drm_i915_gem_object *obj,
2165 			   struct intel_engine_cs *pipelined)
2166 {
2167 	struct drm_i915_private *dev_priv = dev->dev_private;
2168 	u32 alignment;
2169 	int ret;
2170 
2171 	switch (obj->tiling_mode) {
2172 	case I915_TILING_NONE:
2173 		if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
2174 			alignment = 128 * 1024;
2175 		else if (INTEL_INFO(dev)->gen >= 4)
2176 			alignment = 4 * 1024;
2177 		else
2178 			alignment = 64 * 1024;
2179 		break;
2180 	case I915_TILING_X:
2181 		/* pin() will align the object as required by fence */
2182 		alignment = 0;
2183 		break;
2184 	case I915_TILING_Y:
2185 		WARN(1, "Y tiled bo slipped through, driver bug!\n");
2186 		return -EINVAL;
2187 	default:
2188 		BUG();
2189 	}
2190 
2191 	/* Note that the w/a also requires 64 PTE of padding following the
2192 	 * bo. We currently fill all unused PTE with the shadow page and so
2193 	 * we should always have valid PTE following the scanout preventing
2194 	 * the VT-d warning.
2195 	 */
2196 	if (need_vtd_wa(dev) && alignment < 256 * 1024)
2197 		alignment = 256 * 1024;
2198 
2199 	dev_priv->mm.interruptible = false;
2200 	ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined);
2201 	if (ret)
2202 		goto err_interruptible;
2203 
2204 	/* Install a fence for tiled scan-out. Pre-i965 always needs a
2205 	 * fence, whereas 965+ only requires a fence if using
2206 	 * framebuffer compression.  For simplicity, we always install
2207 	 * a fence as the cost is not that onerous.
2208 	 */
2209 	ret = i915_gem_object_get_fence(obj);
2210 	if (ret)
2211 		goto err_unpin;
2212 
2213 	i915_gem_object_pin_fence(obj);
2214 
2215 	dev_priv->mm.interruptible = true;
2216 	return 0;
2217 
2218 err_unpin:
2219 	i915_gem_object_unpin_from_display_plane(obj);
2220 err_interruptible:
2221 	dev_priv->mm.interruptible = true;
2222 	return ret;
2223 }
2224 
2225 void intel_unpin_fb_obj(struct drm_i915_gem_object *obj)
2226 {
2227 	i915_gem_object_unpin_fence(obj);
2228 	i915_gem_object_unpin_from_display_plane(obj);
2229 }
2230 
2231 /* Computes the linear offset to the base tile and adjusts x, y. bytes per pixel
2232  * is assumed to be a power-of-two. */
2233 unsigned long intel_gen4_compute_page_offset(int *x, int *y,
2234 					     unsigned int tiling_mode,
2235 					     unsigned int cpp,
2236 					     unsigned int pitch)
2237 {
2238 	if (tiling_mode != I915_TILING_NONE) {
2239 		unsigned int tile_rows, tiles;
2240 
2241 		tile_rows = *y / 8;
2242 		*y %= 8;
2243 
2244 		tiles = *x / (512/cpp);
2245 		*x %= 512/cpp;
2246 
2247 		return tile_rows * pitch * 8 + tiles * 4096;
2248 	} else {
2249 		unsigned int offset;
2250 
2251 		offset = *y * pitch + *x * cpp;
2252 		*y = 0;
2253 		*x = (offset & 4095) / cpp;
2254 		return offset & -4096;
2255 	}
2256 }
2257 
2258 int intel_format_to_fourcc(int format)
2259 {
2260 	switch (format) {
2261 	case DISPPLANE_8BPP:
2262 		return DRM_FORMAT_C8;
2263 	case DISPPLANE_BGRX555:
2264 		return DRM_FORMAT_XRGB1555;
2265 	case DISPPLANE_BGRX565:
2266 		return DRM_FORMAT_RGB565;
2267 	default:
2268 	case DISPPLANE_BGRX888:
2269 		return DRM_FORMAT_XRGB8888;
2270 	case DISPPLANE_RGBX888:
2271 		return DRM_FORMAT_XBGR8888;
2272 	case DISPPLANE_BGRX101010:
2273 		return DRM_FORMAT_XRGB2101010;
2274 	case DISPPLANE_RGBX101010:
2275 		return DRM_FORMAT_XBGR2101010;
2276 	}
2277 }
2278 
2279 static bool intel_alloc_plane_obj(struct intel_crtc *crtc,
2280 				  struct intel_plane_config *plane_config)
2281 {
2282 	struct drm_device *dev = crtc->base.dev;
2283 	struct drm_i915_gem_object *obj = NULL;
2284 	struct drm_mode_fb_cmd2 mode_cmd = { 0 };
2285 	u32 base = plane_config->base;
2286 
2287 	if (plane_config->size == 0)
2288 		return false;
2289 
2290 	obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base,
2291 							     plane_config->size);
2292 	if (!obj)
2293 		return false;
2294 
2295 	if (plane_config->tiled) {
2296 		obj->tiling_mode = I915_TILING_X;
2297 		obj->stride = crtc->base.primary->fb->pitches[0];
2298 	}
2299 
2300 	mode_cmd.pixel_format = crtc->base.primary->fb->pixel_format;
2301 	mode_cmd.width = crtc->base.primary->fb->width;
2302 	mode_cmd.height = crtc->base.primary->fb->height;
2303 	mode_cmd.pitches[0] = crtc->base.primary->fb->pitches[0];
2304 
2305 	mutex_lock(&dev->struct_mutex);
2306 
2307 	if (intel_framebuffer_init(dev, to_intel_framebuffer(crtc->base.primary->fb),
2308 				   &mode_cmd, obj)) {
2309 		DRM_DEBUG_KMS("intel fb init failed\n");
2310 		goto out_unref_obj;
2311 	}
2312 
2313 	mutex_unlock(&dev->struct_mutex);
2314 
2315 	DRM_DEBUG_KMS("plane fb obj %p\n", obj);
2316 	return true;
2317 
2318 out_unref_obj:
2319 	drm_gem_object_unreference(&obj->base);
2320 	mutex_unlock(&dev->struct_mutex);
2321 	return false;
2322 }
2323 
2324 static void intel_find_plane_obj(struct intel_crtc *intel_crtc,
2325 				 struct intel_plane_config *plane_config)
2326 {
2327 	struct drm_device *dev = intel_crtc->base.dev;
2328 	struct drm_crtc *c;
2329 	struct intel_crtc *i;
2330 	struct intel_framebuffer *fb;
2331 
2332 	if (!intel_crtc->base.primary->fb)
2333 		return;
2334 
2335 	if (intel_alloc_plane_obj(intel_crtc, plane_config))
2336 		return;
2337 
2338 	kfree(intel_crtc->base.primary->fb);
2339 	intel_crtc->base.primary->fb = NULL;
2340 
2341 	/*
2342 	 * Failed to alloc the obj, check to see if we should share
2343 	 * an fb with another CRTC instead
2344 	 */
2345 	for_each_crtc(dev, c) {
2346 		i = to_intel_crtc(c);
2347 
2348 		if (c == &intel_crtc->base)
2349 			continue;
2350 
2351 		if (!i->active || !c->primary->fb)
2352 			continue;
2353 
2354 		fb = to_intel_framebuffer(c->primary->fb);
2355 		if (i915_gem_obj_ggtt_offset(fb->obj) == plane_config->base) {
2356 			drm_framebuffer_reference(c->primary->fb);
2357 			intel_crtc->base.primary->fb = c->primary->fb;
2358 			break;
2359 		}
2360 	}
2361 }
2362 
2363 static void i9xx_update_primary_plane(struct drm_crtc *crtc,
2364 				      struct drm_framebuffer *fb,
2365 				      int x, int y)
2366 {
2367 	struct drm_device *dev = crtc->dev;
2368 	struct drm_i915_private *dev_priv = dev->dev_private;
2369 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2370 	struct intel_framebuffer *intel_fb;
2371 	struct drm_i915_gem_object *obj;
2372 	int plane = intel_crtc->plane;
2373 	unsigned long linear_offset;
2374 	u32 dspcntr;
2375 	u32 reg;
2376 
2377 	intel_fb = to_intel_framebuffer(fb);
2378 	obj = intel_fb->obj;
2379 
2380 	reg = DSPCNTR(plane);
2381 	dspcntr = I915_READ(reg);
2382 	/* Mask out pixel format bits in case we change it */
2383 	dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
2384 	switch (fb->pixel_format) {
2385 	case DRM_FORMAT_C8:
2386 		dspcntr |= DISPPLANE_8BPP;
2387 		break;
2388 	case DRM_FORMAT_XRGB1555:
2389 	case DRM_FORMAT_ARGB1555:
2390 		dspcntr |= DISPPLANE_BGRX555;
2391 		break;
2392 	case DRM_FORMAT_RGB565:
2393 		dspcntr |= DISPPLANE_BGRX565;
2394 		break;
2395 	case DRM_FORMAT_XRGB8888:
2396 	case DRM_FORMAT_ARGB8888:
2397 		dspcntr |= DISPPLANE_BGRX888;
2398 		break;
2399 	case DRM_FORMAT_XBGR8888:
2400 	case DRM_FORMAT_ABGR8888:
2401 		dspcntr |= DISPPLANE_RGBX888;
2402 		break;
2403 	case DRM_FORMAT_XRGB2101010:
2404 	case DRM_FORMAT_ARGB2101010:
2405 		dspcntr |= DISPPLANE_BGRX101010;
2406 		break;
2407 	case DRM_FORMAT_XBGR2101010:
2408 	case DRM_FORMAT_ABGR2101010:
2409 		dspcntr |= DISPPLANE_RGBX101010;
2410 		break;
2411 	default:
2412 		BUG();
2413 	}
2414 
2415 	if (INTEL_INFO(dev)->gen >= 4) {
2416 		if (obj->tiling_mode != I915_TILING_NONE)
2417 			dspcntr |= DISPPLANE_TILED;
2418 		else
2419 			dspcntr &= ~DISPPLANE_TILED;
2420 	}
2421 
2422 	if (IS_G4X(dev))
2423 		dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
2424 
2425 	I915_WRITE(reg, dspcntr);
2426 
2427 	linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
2428 
2429 	if (INTEL_INFO(dev)->gen >= 4) {
2430 		intel_crtc->dspaddr_offset =
2431 			intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
2432 						       fb->bits_per_pixel / 8,
2433 						       fb->pitches[0]);
2434 		linear_offset -= intel_crtc->dspaddr_offset;
2435 	} else {
2436 		intel_crtc->dspaddr_offset = linear_offset;
2437 	}
2438 
2439 	DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
2440 		      i915_gem_obj_ggtt_offset(obj), linear_offset, x, y,
2441 		      fb->pitches[0]);
2442 	I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
2443 	if (INTEL_INFO(dev)->gen >= 4) {
2444 		I915_WRITE(DSPSURF(plane),
2445 			   i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
2446 		I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
2447 		I915_WRITE(DSPLINOFF(plane), linear_offset);
2448 	} else
2449 		I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + linear_offset);
2450 	POSTING_READ(reg);
2451 }
2452 
2453 static void ironlake_update_primary_plane(struct drm_crtc *crtc,
2454 					  struct drm_framebuffer *fb,
2455 					  int x, int y)
2456 {
2457 	struct drm_device *dev = crtc->dev;
2458 	struct drm_i915_private *dev_priv = dev->dev_private;
2459 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2460 	struct intel_framebuffer *intel_fb;
2461 	struct drm_i915_gem_object *obj;
2462 	int plane = intel_crtc->plane;
2463 	unsigned long linear_offset;
2464 	u32 dspcntr;
2465 	u32 reg;
2466 
2467 	intel_fb = to_intel_framebuffer(fb);
2468 	obj = intel_fb->obj;
2469 
2470 	reg = DSPCNTR(plane);
2471 	dspcntr = I915_READ(reg);
2472 	/* Mask out pixel format bits in case we change it */
2473 	dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
2474 	switch (fb->pixel_format) {
2475 	case DRM_FORMAT_C8:
2476 		dspcntr |= DISPPLANE_8BPP;
2477 		break;
2478 	case DRM_FORMAT_RGB565:
2479 		dspcntr |= DISPPLANE_BGRX565;
2480 		break;
2481 	case DRM_FORMAT_XRGB8888:
2482 	case DRM_FORMAT_ARGB8888:
2483 		dspcntr |= DISPPLANE_BGRX888;
2484 		break;
2485 	case DRM_FORMAT_XBGR8888:
2486 	case DRM_FORMAT_ABGR8888:
2487 		dspcntr |= DISPPLANE_RGBX888;
2488 		break;
2489 	case DRM_FORMAT_XRGB2101010:
2490 	case DRM_FORMAT_ARGB2101010:
2491 		dspcntr |= DISPPLANE_BGRX101010;
2492 		break;
2493 	case DRM_FORMAT_XBGR2101010:
2494 	case DRM_FORMAT_ABGR2101010:
2495 		dspcntr |= DISPPLANE_RGBX101010;
2496 		break;
2497 	default:
2498 		BUG();
2499 	}
2500 
2501 	if (obj->tiling_mode != I915_TILING_NONE)
2502 		dspcntr |= DISPPLANE_TILED;
2503 	else
2504 		dspcntr &= ~DISPPLANE_TILED;
2505 
2506 	if (IS_HASWELL(dev) || IS_BROADWELL(dev))
2507 		dspcntr &= ~DISPPLANE_TRICKLE_FEED_DISABLE;
2508 	else
2509 		dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
2510 
2511 	I915_WRITE(reg, dspcntr);
2512 
2513 	linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
2514 	intel_crtc->dspaddr_offset =
2515 		intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
2516 					       fb->bits_per_pixel / 8,
2517 					       fb->pitches[0]);
2518 	linear_offset -= intel_crtc->dspaddr_offset;
2519 
2520 	DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
2521 		      i915_gem_obj_ggtt_offset(obj), linear_offset, x, y,
2522 		      fb->pitches[0]);
2523 	I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
2524 	I915_WRITE(DSPSURF(plane),
2525 		   i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
2526 	if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
2527 		I915_WRITE(DSPOFFSET(plane), (y << 16) | x);
2528 	} else {
2529 		I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
2530 		I915_WRITE(DSPLINOFF(plane), linear_offset);
2531 	}
2532 	POSTING_READ(reg);
2533 }
2534 
2535 /* Assume fb object is pinned & idle & fenced and just update base pointers */
2536 static int
2537 intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
2538 			   int x, int y, enum mode_set_atomic state)
2539 {
2540 	struct drm_device *dev = crtc->dev;
2541 	struct drm_i915_private *dev_priv = dev->dev_private;
2542 
2543 	if (dev_priv->display.disable_fbc)
2544 		dev_priv->display.disable_fbc(dev);
2545 	intel_increase_pllclock(crtc);
2546 
2547 	dev_priv->display.update_primary_plane(crtc, fb, x, y);
2548 
2549 	return 0;
2550 }
2551 
2552 void intel_display_handle_reset(struct drm_device *dev)
2553 {
2554 	struct drm_i915_private *dev_priv = dev->dev_private;
2555 	struct drm_crtc *crtc;
2556 
2557 	/*
2558 	 * Flips in the rings have been nuked by the reset,
2559 	 * so complete all pending flips so that user space
2560 	 * will get its events and not get stuck.
2561 	 *
2562 	 * Also update the base address of all primary
2563 	 * planes to the the last fb to make sure we're
2564 	 * showing the correct fb after a reset.
2565 	 *
2566 	 * Need to make two loops over the crtcs so that we
2567 	 * don't try to grab a crtc mutex before the
2568 	 * pending_flip_queue really got woken up.
2569 	 */
2570 
2571 	for_each_crtc(dev, crtc) {
2572 		struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2573 		enum plane plane = intel_crtc->plane;
2574 
2575 		intel_prepare_page_flip(dev, plane);
2576 		intel_finish_page_flip_plane(dev, plane);
2577 	}
2578 
2579 	for_each_crtc(dev, crtc) {
2580 		struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2581 
2582 		drm_modeset_lock(&crtc->mutex, NULL);
2583 		/*
2584 		 * FIXME: Once we have proper support for primary planes (and
2585 		 * disabling them without disabling the entire crtc) allow again
2586 		 * a NULL crtc->primary->fb.
2587 		 */
2588 		if (intel_crtc->active && crtc->primary->fb)
2589 			dev_priv->display.update_primary_plane(crtc,
2590 							       crtc->primary->fb,
2591 							       crtc->x,
2592 							       crtc->y);
2593 		drm_modeset_unlock(&crtc->mutex);
2594 	}
2595 }
2596 
2597 static int
2598 intel_finish_fb(struct drm_framebuffer *old_fb)
2599 {
2600 	struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
2601 	struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2602 	bool was_interruptible = dev_priv->mm.interruptible;
2603 	int ret;
2604 
2605 	/* Big Hammer, we also need to ensure that any pending
2606 	 * MI_WAIT_FOR_EVENT inside a user batch buffer on the
2607 	 * current scanout is retired before unpinning the old
2608 	 * framebuffer.
2609 	 *
2610 	 * This should only fail upon a hung GPU, in which case we
2611 	 * can safely continue.
2612 	 */
2613 	dev_priv->mm.interruptible = false;
2614 	ret = i915_gem_object_finish_gpu(obj);
2615 	dev_priv->mm.interruptible = was_interruptible;
2616 
2617 	return ret;
2618 }
2619 
2620 static bool intel_crtc_has_pending_flip(struct drm_crtc *crtc)
2621 {
2622 	struct drm_device *dev = crtc->dev;
2623 	struct drm_i915_private *dev_priv = dev->dev_private;
2624 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2625 	bool pending;
2626 
2627 	if (i915_reset_in_progress(&dev_priv->gpu_error) ||
2628 	    intel_crtc->reset_counter != atomic_read(&dev_priv->gpu_error.reset_counter))
2629 		return false;
2630 
2631 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
2632 	pending = to_intel_crtc(crtc)->unpin_work != NULL;
2633 	lockmgr(&dev->event_lock, LK_RELEASE);
2634 
2635 	return pending;
2636 }
2637 
2638 static int
2639 intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
2640 		    struct drm_framebuffer *fb)
2641 {
2642 	struct drm_device *dev = crtc->dev;
2643 	struct drm_i915_private *dev_priv = dev->dev_private;
2644 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2645 	struct drm_framebuffer *old_fb;
2646 	int ret;
2647 
2648 	if (intel_crtc_has_pending_flip(crtc)) {
2649 		DRM_ERROR("pipe is still busy with an old pageflip\n");
2650 		return -EBUSY;
2651 	}
2652 
2653 	/* no fb bound */
2654 	if (!fb) {
2655 		DRM_ERROR("No FB bound\n");
2656 		return 0;
2657 	}
2658 
2659 	if (intel_crtc->plane > INTEL_INFO(dev)->num_pipes) {
2660 		DRM_ERROR("no plane for crtc: plane %c, num_pipes %d\n",
2661 			  plane_name(intel_crtc->plane),
2662 			  INTEL_INFO(dev)->num_pipes);
2663 		return -EINVAL;
2664 	}
2665 
2666 	mutex_lock(&dev->struct_mutex);
2667 	ret = intel_pin_and_fence_fb_obj(dev,
2668 					 to_intel_framebuffer(fb)->obj,
2669 					 NULL);
2670 	mutex_unlock(&dev->struct_mutex);
2671 	if (ret != 0) {
2672 		DRM_ERROR("pin & fence failed\n");
2673 		return ret;
2674 	}
2675 
2676 	/*
2677 	 * Update pipe size and adjust fitter if needed: the reason for this is
2678 	 * that in compute_mode_changes we check the native mode (not the pfit
2679 	 * mode) to see if we can flip rather than do a full mode set. In the
2680 	 * fastboot case, we'll flip, but if we don't update the pipesrc and
2681 	 * pfit state, we'll end up with a big fb scanned out into the wrong
2682 	 * sized surface.
2683 	 *
2684 	 * To fix this properly, we need to hoist the checks up into
2685 	 * compute_mode_changes (or above), check the actual pfit state and
2686 	 * whether the platform allows pfit disable with pipe active, and only
2687 	 * then update the pipesrc and pfit state, even on the flip path.
2688 	 */
2689 	if (i915.fastboot) {
2690 		const struct drm_display_mode *adjusted_mode =
2691 			&intel_crtc->config.adjusted_mode;
2692 
2693 		I915_WRITE(PIPESRC(intel_crtc->pipe),
2694 			   ((adjusted_mode->crtc_hdisplay - 1) << 16) |
2695 			   (adjusted_mode->crtc_vdisplay - 1));
2696 		if (!intel_crtc->config.pch_pfit.enabled &&
2697 		    (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) ||
2698 		     intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))) {
2699 			I915_WRITE(PF_CTL(intel_crtc->pipe), 0);
2700 			I915_WRITE(PF_WIN_POS(intel_crtc->pipe), 0);
2701 			I915_WRITE(PF_WIN_SZ(intel_crtc->pipe), 0);
2702 		}
2703 		intel_crtc->config.pipe_src_w = adjusted_mode->crtc_hdisplay;
2704 		intel_crtc->config.pipe_src_h = adjusted_mode->crtc_vdisplay;
2705 	}
2706 
2707 	dev_priv->display.update_primary_plane(crtc, fb, x, y);
2708 
2709 	old_fb = crtc->primary->fb;
2710 	crtc->primary->fb = fb;
2711 	crtc->x = x;
2712 	crtc->y = y;
2713 
2714 	if (old_fb) {
2715 		if (intel_crtc->active && old_fb != fb)
2716 			intel_wait_for_vblank(dev, intel_crtc->pipe);
2717 		mutex_lock(&dev->struct_mutex);
2718 		intel_unpin_fb_obj(to_intel_framebuffer(old_fb)->obj);
2719 		mutex_unlock(&dev->struct_mutex);
2720 	}
2721 
2722 	mutex_lock(&dev->struct_mutex);
2723 	intel_update_fbc(dev);
2724 	intel_edp_psr_update(dev);
2725 	mutex_unlock(&dev->struct_mutex);
2726 
2727 	return 0;
2728 }
2729 
2730 static void intel_fdi_normal_train(struct drm_crtc *crtc)
2731 {
2732 	struct drm_device *dev = crtc->dev;
2733 	struct drm_i915_private *dev_priv = dev->dev_private;
2734 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2735 	int pipe = intel_crtc->pipe;
2736 	u32 reg, temp;
2737 
2738 	/* enable normal train */
2739 	reg = FDI_TX_CTL(pipe);
2740 	temp = I915_READ(reg);
2741 	if (IS_IVYBRIDGE(dev)) {
2742 		temp &= ~FDI_LINK_TRAIN_NONE_IVB;
2743 		temp |= FDI_LINK_TRAIN_NONE_IVB | FDI_TX_ENHANCE_FRAME_ENABLE;
2744 	} else {
2745 		temp &= ~FDI_LINK_TRAIN_NONE;
2746 		temp |= FDI_LINK_TRAIN_NONE | FDI_TX_ENHANCE_FRAME_ENABLE;
2747 	}
2748 	I915_WRITE(reg, temp);
2749 
2750 	reg = FDI_RX_CTL(pipe);
2751 	temp = I915_READ(reg);
2752 	if (HAS_PCH_CPT(dev)) {
2753 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
2754 		temp |= FDI_LINK_TRAIN_NORMAL_CPT;
2755 	} else {
2756 		temp &= ~FDI_LINK_TRAIN_NONE;
2757 		temp |= FDI_LINK_TRAIN_NONE;
2758 	}
2759 	I915_WRITE(reg, temp | FDI_RX_ENHANCE_FRAME_ENABLE);
2760 
2761 	/* wait one idle pattern time */
2762 	POSTING_READ(reg);
2763 	udelay(1000);
2764 
2765 	/* IVB wants error correction enabled */
2766 	if (IS_IVYBRIDGE(dev))
2767 		I915_WRITE(reg, I915_READ(reg) | FDI_FS_ERRC_ENABLE |
2768 			   FDI_FE_ERRC_ENABLE);
2769 }
2770 
2771 static bool pipe_has_enabled_pch(struct intel_crtc *crtc)
2772 {
2773 	return crtc->base.enabled && crtc->active &&
2774 		crtc->config.has_pch_encoder;
2775 }
2776 
2777 static void ivb_modeset_global_resources(struct drm_device *dev)
2778 {
2779 	struct drm_i915_private *dev_priv = dev->dev_private;
2780 	struct intel_crtc *pipe_B_crtc =
2781 		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_B]);
2782 	struct intel_crtc *pipe_C_crtc =
2783 		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_C]);
2784 	uint32_t temp;
2785 
2786 	/*
2787 	 * When everything is off disable fdi C so that we could enable fdi B
2788 	 * with all lanes. Note that we don't care about enabled pipes without
2789 	 * an enabled pch encoder.
2790 	 */
2791 	if (!pipe_has_enabled_pch(pipe_B_crtc) &&
2792 	    !pipe_has_enabled_pch(pipe_C_crtc)) {
2793 		WARN_ON(I915_READ(FDI_RX_CTL(PIPE_B)) & FDI_RX_ENABLE);
2794 		WARN_ON(I915_READ(FDI_RX_CTL(PIPE_C)) & FDI_RX_ENABLE);
2795 
2796 		temp = I915_READ(SOUTH_CHICKEN1);
2797 		temp &= ~FDI_BC_BIFURCATION_SELECT;
2798 		DRM_DEBUG_KMS("disabling fdi C rx\n");
2799 		I915_WRITE(SOUTH_CHICKEN1, temp);
2800 	}
2801 }
2802 
2803 /* The FDI link training functions for ILK/Ibexpeak. */
2804 static void ironlake_fdi_link_train(struct drm_crtc *crtc)
2805 {
2806 	struct drm_device *dev = crtc->dev;
2807 	struct drm_i915_private *dev_priv = dev->dev_private;
2808 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2809 	int pipe = intel_crtc->pipe;
2810 	u32 reg, temp, tries;
2811 
2812 	/* FDI needs bits from pipe first */
2813 	assert_pipe_enabled(dev_priv, pipe);
2814 
2815 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
2816 	   for train result */
2817 	reg = FDI_RX_IMR(pipe);
2818 	temp = I915_READ(reg);
2819 	temp &= ~FDI_RX_SYMBOL_LOCK;
2820 	temp &= ~FDI_RX_BIT_LOCK;
2821 	I915_WRITE(reg, temp);
2822 	I915_READ(reg);
2823 	udelay(150);
2824 
2825 	/* enable CPU FDI TX and PCH FDI RX */
2826 	reg = FDI_TX_CTL(pipe);
2827 	temp = I915_READ(reg);
2828 	temp &= ~FDI_DP_PORT_WIDTH_MASK;
2829 	temp |= FDI_DP_PORT_WIDTH(intel_crtc->config.fdi_lanes);
2830 	temp &= ~FDI_LINK_TRAIN_NONE;
2831 	temp |= FDI_LINK_TRAIN_PATTERN_1;
2832 	I915_WRITE(reg, temp | FDI_TX_ENABLE);
2833 
2834 	reg = FDI_RX_CTL(pipe);
2835 	temp = I915_READ(reg);
2836 	temp &= ~FDI_LINK_TRAIN_NONE;
2837 	temp |= FDI_LINK_TRAIN_PATTERN_1;
2838 	I915_WRITE(reg, temp | FDI_RX_ENABLE);
2839 
2840 	POSTING_READ(reg);
2841 	udelay(150);
2842 
2843 	/* Ironlake workaround, enable clock pointer after FDI enable*/
2844 	I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
2845 	I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR |
2846 		   FDI_RX_PHASE_SYNC_POINTER_EN);
2847 
2848 	reg = FDI_RX_IIR(pipe);
2849 	for (tries = 0; tries < 5; tries++) {
2850 		temp = I915_READ(reg);
2851 		DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
2852 
2853 		if ((temp & FDI_RX_BIT_LOCK)) {
2854 			DRM_DEBUG_KMS("FDI train 1 done.\n");
2855 			I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
2856 			break;
2857 		}
2858 	}
2859 	if (tries == 5)
2860 		DRM_ERROR("FDI train 1 fail!\n");
2861 
2862 	/* Train 2 */
2863 	reg = FDI_TX_CTL(pipe);
2864 	temp = I915_READ(reg);
2865 	temp &= ~FDI_LINK_TRAIN_NONE;
2866 	temp |= FDI_LINK_TRAIN_PATTERN_2;
2867 	I915_WRITE(reg, temp);
2868 
2869 	reg = FDI_RX_CTL(pipe);
2870 	temp = I915_READ(reg);
2871 	temp &= ~FDI_LINK_TRAIN_NONE;
2872 	temp |= FDI_LINK_TRAIN_PATTERN_2;
2873 	I915_WRITE(reg, temp);
2874 
2875 	POSTING_READ(reg);
2876 	udelay(150);
2877 
2878 	reg = FDI_RX_IIR(pipe);
2879 	for (tries = 0; tries < 5; tries++) {
2880 		temp = I915_READ(reg);
2881 		DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
2882 
2883 		if (temp & FDI_RX_SYMBOL_LOCK) {
2884 			I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
2885 			DRM_DEBUG_KMS("FDI train 2 done.\n");
2886 			break;
2887 		}
2888 	}
2889 	if (tries == 5)
2890 		DRM_ERROR("FDI train 2 fail!\n");
2891 
2892 	DRM_DEBUG_KMS("FDI train done\n");
2893 
2894 }
2895 
2896 static const int snb_b_fdi_train_param[] = {
2897 	FDI_LINK_TRAIN_400MV_0DB_SNB_B,
2898 	FDI_LINK_TRAIN_400MV_6DB_SNB_B,
2899 	FDI_LINK_TRAIN_600MV_3_5DB_SNB_B,
2900 	FDI_LINK_TRAIN_800MV_0DB_SNB_B,
2901 };
2902 
2903 /* The FDI link training functions for SNB/Cougarpoint. */
2904 static void gen6_fdi_link_train(struct drm_crtc *crtc)
2905 {
2906 	struct drm_device *dev = crtc->dev;
2907 	struct drm_i915_private *dev_priv = dev->dev_private;
2908 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2909 	int pipe = intel_crtc->pipe;
2910 	u32 reg, temp, i, retry;
2911 
2912 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
2913 	   for train result */
2914 	reg = FDI_RX_IMR(pipe);
2915 	temp = I915_READ(reg);
2916 	temp &= ~FDI_RX_SYMBOL_LOCK;
2917 	temp &= ~FDI_RX_BIT_LOCK;
2918 	I915_WRITE(reg, temp);
2919 
2920 	POSTING_READ(reg);
2921 	udelay(150);
2922 
2923 	/* enable CPU FDI TX and PCH FDI RX */
2924 	reg = FDI_TX_CTL(pipe);
2925 	temp = I915_READ(reg);
2926 	temp &= ~FDI_DP_PORT_WIDTH_MASK;
2927 	temp |= FDI_DP_PORT_WIDTH(intel_crtc->config.fdi_lanes);
2928 	temp &= ~FDI_LINK_TRAIN_NONE;
2929 	temp |= FDI_LINK_TRAIN_PATTERN_1;
2930 	temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
2931 	/* SNB-B */
2932 	temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
2933 	I915_WRITE(reg, temp | FDI_TX_ENABLE);
2934 
2935 	I915_WRITE(FDI_RX_MISC(pipe),
2936 		   FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
2937 
2938 	reg = FDI_RX_CTL(pipe);
2939 	temp = I915_READ(reg);
2940 	if (HAS_PCH_CPT(dev)) {
2941 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
2942 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
2943 	} else {
2944 		temp &= ~FDI_LINK_TRAIN_NONE;
2945 		temp |= FDI_LINK_TRAIN_PATTERN_1;
2946 	}
2947 	I915_WRITE(reg, temp | FDI_RX_ENABLE);
2948 
2949 	POSTING_READ(reg);
2950 	udelay(150);
2951 
2952 	for (i = 0; i < 4; i++) {
2953 		reg = FDI_TX_CTL(pipe);
2954 		temp = I915_READ(reg);
2955 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
2956 		temp |= snb_b_fdi_train_param[i];
2957 		I915_WRITE(reg, temp);
2958 
2959 		POSTING_READ(reg);
2960 		udelay(500);
2961 
2962 		for (retry = 0; retry < 5; retry++) {
2963 			reg = FDI_RX_IIR(pipe);
2964 			temp = I915_READ(reg);
2965 			DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
2966 			if (temp & FDI_RX_BIT_LOCK) {
2967 				I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
2968 				DRM_DEBUG_KMS("FDI train 1 done.\n");
2969 				break;
2970 			}
2971 			udelay(50);
2972 		}
2973 		if (retry < 5)
2974 			break;
2975 	}
2976 	if (i == 4)
2977 		DRM_ERROR("FDI train 1 fail!\n");
2978 
2979 	/* Train 2 */
2980 	reg = FDI_TX_CTL(pipe);
2981 	temp = I915_READ(reg);
2982 	temp &= ~FDI_LINK_TRAIN_NONE;
2983 	temp |= FDI_LINK_TRAIN_PATTERN_2;
2984 	if (IS_GEN6(dev)) {
2985 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
2986 		/* SNB-B */
2987 		temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
2988 	}
2989 	I915_WRITE(reg, temp);
2990 
2991 	reg = FDI_RX_CTL(pipe);
2992 	temp = I915_READ(reg);
2993 	if (HAS_PCH_CPT(dev)) {
2994 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
2995 		temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
2996 	} else {
2997 		temp &= ~FDI_LINK_TRAIN_NONE;
2998 		temp |= FDI_LINK_TRAIN_PATTERN_2;
2999 	}
3000 	I915_WRITE(reg, temp);
3001 
3002 	POSTING_READ(reg);
3003 	udelay(150);
3004 
3005 	for (i = 0; i < 4; i++) {
3006 		reg = FDI_TX_CTL(pipe);
3007 		temp = I915_READ(reg);
3008 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
3009 		temp |= snb_b_fdi_train_param[i];
3010 		I915_WRITE(reg, temp);
3011 
3012 		POSTING_READ(reg);
3013 		udelay(500);
3014 
3015 		for (retry = 0; retry < 5; retry++) {
3016 			reg = FDI_RX_IIR(pipe);
3017 			temp = I915_READ(reg);
3018 			DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
3019 			if (temp & FDI_RX_SYMBOL_LOCK) {
3020 				I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
3021 				DRM_DEBUG_KMS("FDI train 2 done.\n");
3022 				break;
3023 			}
3024 			udelay(50);
3025 		}
3026 		if (retry < 5)
3027 			break;
3028 	}
3029 	if (i == 4)
3030 		DRM_ERROR("FDI train 2 fail!\n");
3031 
3032 	DRM_DEBUG_KMS("FDI train done.\n");
3033 }
3034 
3035 /* Manual link training for Ivy Bridge A0 parts */
3036 static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
3037 {
3038 	struct drm_device *dev = crtc->dev;
3039 	struct drm_i915_private *dev_priv = dev->dev_private;
3040 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3041 	int pipe = intel_crtc->pipe;
3042 	u32 reg, temp, i, j;
3043 
3044 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
3045 	   for train result */
3046 	reg = FDI_RX_IMR(pipe);
3047 	temp = I915_READ(reg);
3048 	temp &= ~FDI_RX_SYMBOL_LOCK;
3049 	temp &= ~FDI_RX_BIT_LOCK;
3050 	I915_WRITE(reg, temp);
3051 
3052 	POSTING_READ(reg);
3053 	udelay(150);
3054 
3055 	DRM_DEBUG_KMS("FDI_RX_IIR before link train 0x%x\n",
3056 		      I915_READ(FDI_RX_IIR(pipe)));
3057 
3058 	/* Try each vswing and preemphasis setting twice before moving on */
3059 	for (j = 0; j < ARRAY_SIZE(snb_b_fdi_train_param) * 2; j++) {
3060 		/* disable first in case we need to retry */
3061 		reg = FDI_TX_CTL(pipe);
3062 		temp = I915_READ(reg);
3063 		temp &= ~(FDI_LINK_TRAIN_AUTO | FDI_LINK_TRAIN_NONE_IVB);
3064 		temp &= ~FDI_TX_ENABLE;
3065 		I915_WRITE(reg, temp);
3066 
3067 		reg = FDI_RX_CTL(pipe);
3068 		temp = I915_READ(reg);
3069 		temp &= ~FDI_LINK_TRAIN_AUTO;
3070 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
3071 		temp &= ~FDI_RX_ENABLE;
3072 		I915_WRITE(reg, temp);
3073 
3074 		/* enable CPU FDI TX and PCH FDI RX */
3075 		reg = FDI_TX_CTL(pipe);
3076 		temp = I915_READ(reg);
3077 		temp &= ~FDI_DP_PORT_WIDTH_MASK;
3078 		temp |= FDI_DP_PORT_WIDTH(intel_crtc->config.fdi_lanes);
3079 		temp |= FDI_LINK_TRAIN_PATTERN_1_IVB;
3080 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
3081 		temp |= snb_b_fdi_train_param[j/2];
3082 		temp |= FDI_COMPOSITE_SYNC;
3083 		I915_WRITE(reg, temp | FDI_TX_ENABLE);
3084 
3085 		I915_WRITE(FDI_RX_MISC(pipe),
3086 			   FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
3087 
3088 		reg = FDI_RX_CTL(pipe);
3089 		temp = I915_READ(reg);
3090 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
3091 		temp |= FDI_COMPOSITE_SYNC;
3092 		I915_WRITE(reg, temp | FDI_RX_ENABLE);
3093 
3094 		POSTING_READ(reg);
3095 		udelay(1); /* should be 0.5us */
3096 
3097 		for (i = 0; i < 4; i++) {
3098 			reg = FDI_RX_IIR(pipe);
3099 			temp = I915_READ(reg);
3100 			DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
3101 
3102 			if (temp & FDI_RX_BIT_LOCK ||
3103 			    (I915_READ(reg) & FDI_RX_BIT_LOCK)) {
3104 				I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
3105 				DRM_DEBUG_KMS("FDI train 1 done, level %i.\n",
3106 					      i);
3107 				break;
3108 			}
3109 			udelay(1); /* should be 0.5us */
3110 		}
3111 		if (i == 4) {
3112 			DRM_DEBUG_KMS("FDI train 1 fail on vswing %d\n", j / 2);
3113 			continue;
3114 		}
3115 
3116 		/* Train 2 */
3117 		reg = FDI_TX_CTL(pipe);
3118 		temp = I915_READ(reg);
3119 		temp &= ~FDI_LINK_TRAIN_NONE_IVB;
3120 		temp |= FDI_LINK_TRAIN_PATTERN_2_IVB;
3121 		I915_WRITE(reg, temp);
3122 
3123 		reg = FDI_RX_CTL(pipe);
3124 		temp = I915_READ(reg);
3125 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
3126 		temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
3127 		I915_WRITE(reg, temp);
3128 
3129 		POSTING_READ(reg);
3130 		udelay(2); /* should be 1.5us */
3131 
3132 		for (i = 0; i < 4; i++) {
3133 			reg = FDI_RX_IIR(pipe);
3134 			temp = I915_READ(reg);
3135 			DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
3136 
3137 			if (temp & FDI_RX_SYMBOL_LOCK ||
3138 			    (I915_READ(reg) & FDI_RX_SYMBOL_LOCK)) {
3139 				I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
3140 				DRM_DEBUG_KMS("FDI train 2 done, level %i.\n",
3141 					      i);
3142 				goto train_done;
3143 			}
3144 			udelay(2); /* should be 1.5us */
3145 		}
3146 		if (i == 4)
3147 			DRM_DEBUG_KMS("FDI train 2 fail on vswing %d\n", j / 2);
3148 	}
3149 
3150 train_done:
3151 	DRM_DEBUG_KMS("FDI train done.\n");
3152 }
3153 
3154 static void ironlake_fdi_pll_enable(struct intel_crtc *intel_crtc)
3155 {
3156 	struct drm_device *dev = intel_crtc->base.dev;
3157 	struct drm_i915_private *dev_priv = dev->dev_private;
3158 	int pipe = intel_crtc->pipe;
3159 	u32 reg, temp;
3160 
3161 
3162 	/* enable PCH FDI RX PLL, wait warmup plus DMI latency */
3163 	reg = FDI_RX_CTL(pipe);
3164 	temp = I915_READ(reg);
3165 	temp &= ~(FDI_DP_PORT_WIDTH_MASK | (0x7 << 16));
3166 	temp |= FDI_DP_PORT_WIDTH(intel_crtc->config.fdi_lanes);
3167 	temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
3168 	I915_WRITE(reg, temp | FDI_RX_PLL_ENABLE);
3169 
3170 	POSTING_READ(reg);
3171 	udelay(200);
3172 
3173 	/* Switch from Rawclk to PCDclk */
3174 	temp = I915_READ(reg);
3175 	I915_WRITE(reg, temp | FDI_PCDCLK);
3176 
3177 	POSTING_READ(reg);
3178 	udelay(200);
3179 
3180 	/* Enable CPU FDI TX PLL, always on for Ironlake */
3181 	reg = FDI_TX_CTL(pipe);
3182 	temp = I915_READ(reg);
3183 	if ((temp & FDI_TX_PLL_ENABLE) == 0) {
3184 		I915_WRITE(reg, temp | FDI_TX_PLL_ENABLE);
3185 
3186 		POSTING_READ(reg);
3187 		udelay(100);
3188 	}
3189 }
3190 
3191 static void ironlake_fdi_pll_disable(struct intel_crtc *intel_crtc)
3192 {
3193 	struct drm_device *dev = intel_crtc->base.dev;
3194 	struct drm_i915_private *dev_priv = dev->dev_private;
3195 	int pipe = intel_crtc->pipe;
3196 	u32 reg, temp;
3197 
3198 	/* Switch from PCDclk to Rawclk */
3199 	reg = FDI_RX_CTL(pipe);
3200 	temp = I915_READ(reg);
3201 	I915_WRITE(reg, temp & ~FDI_PCDCLK);
3202 
3203 	/* Disable CPU FDI TX PLL */
3204 	reg = FDI_TX_CTL(pipe);
3205 	temp = I915_READ(reg);
3206 	I915_WRITE(reg, temp & ~FDI_TX_PLL_ENABLE);
3207 
3208 	POSTING_READ(reg);
3209 	udelay(100);
3210 
3211 	reg = FDI_RX_CTL(pipe);
3212 	temp = I915_READ(reg);
3213 	I915_WRITE(reg, temp & ~FDI_RX_PLL_ENABLE);
3214 
3215 	/* Wait for the clocks to turn off. */
3216 	POSTING_READ(reg);
3217 	udelay(100);
3218 }
3219 
3220 static void ironlake_fdi_disable(struct drm_crtc *crtc)
3221 {
3222 	struct drm_device *dev = crtc->dev;
3223 	struct drm_i915_private *dev_priv = dev->dev_private;
3224 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3225 	int pipe = intel_crtc->pipe;
3226 	u32 reg, temp;
3227 
3228 	/* disable CPU FDI tx and PCH FDI rx */
3229 	reg = FDI_TX_CTL(pipe);
3230 	temp = I915_READ(reg);
3231 	I915_WRITE(reg, temp & ~FDI_TX_ENABLE);
3232 	POSTING_READ(reg);
3233 
3234 	reg = FDI_RX_CTL(pipe);
3235 	temp = I915_READ(reg);
3236 	temp &= ~(0x7 << 16);
3237 	temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
3238 	I915_WRITE(reg, temp & ~FDI_RX_ENABLE);
3239 
3240 	POSTING_READ(reg);
3241 	udelay(100);
3242 
3243 	/* Ironlake workaround, disable clock pointer after downing FDI */
3244 	if (HAS_PCH_IBX(dev))
3245 		I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
3246 
3247 	/* still set train pattern 1 */
3248 	reg = FDI_TX_CTL(pipe);
3249 	temp = I915_READ(reg);
3250 	temp &= ~FDI_LINK_TRAIN_NONE;
3251 	temp |= FDI_LINK_TRAIN_PATTERN_1;
3252 	I915_WRITE(reg, temp);
3253 
3254 	reg = FDI_RX_CTL(pipe);
3255 	temp = I915_READ(reg);
3256 	if (HAS_PCH_CPT(dev)) {
3257 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
3258 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
3259 	} else {
3260 		temp &= ~FDI_LINK_TRAIN_NONE;
3261 		temp |= FDI_LINK_TRAIN_PATTERN_1;
3262 	}
3263 	/* BPC in FDI rx is consistent with that in PIPECONF */
3264 	temp &= ~(0x07 << 16);
3265 	temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
3266 	I915_WRITE(reg, temp);
3267 
3268 	POSTING_READ(reg);
3269 	udelay(100);
3270 }
3271 
3272 bool intel_has_pending_fb_unpin(struct drm_device *dev)
3273 {
3274 	struct intel_crtc *crtc;
3275 
3276 	/* Note that we don't need to be called with mode_config.lock here
3277 	 * as our list of CRTC objects is static for the lifetime of the
3278 	 * device and so cannot disappear as we iterate. Similarly, we can
3279 	 * happily treat the predicates as racy, atomic checks as userspace
3280 	 * cannot claim and pin a new fb without at least acquring the
3281 	 * struct_mutex and so serialising with us.
3282 	 */
3283 	for_each_intel_crtc(dev, crtc) {
3284 		if (atomic_read(&crtc->unpin_work_count) == 0)
3285 			continue;
3286 
3287 		if (crtc->unpin_work)
3288 			intel_wait_for_vblank(dev, crtc->pipe);
3289 
3290 		return true;
3291 	}
3292 
3293 	return false;
3294 }
3295 
3296 void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
3297 {
3298 	struct drm_device *dev = crtc->dev;
3299 	struct drm_i915_private *dev_priv = dev->dev_private;
3300 
3301 	if (crtc->primary->fb == NULL)
3302 		return;
3303 
3304 	WARN_ON(waitqueue_active(&dev_priv->pending_flip_queue));
3305 
3306 	WARN_ON(wait_event_timeout(dev_priv->pending_flip_queue,
3307 				   !intel_crtc_has_pending_flip(crtc),
3308 				   60*HZ) == 0);
3309 
3310 	mutex_lock(&dev->struct_mutex);
3311 	intel_finish_fb(crtc->primary->fb);
3312 	mutex_unlock(&dev->struct_mutex);
3313 }
3314 
3315 /* Program iCLKIP clock to the desired frequency */
3316 static void lpt_program_iclkip(struct drm_crtc *crtc)
3317 {
3318 	struct drm_device *dev = crtc->dev;
3319 	struct drm_i915_private *dev_priv = dev->dev_private;
3320 	int clock = to_intel_crtc(crtc)->config.adjusted_mode.crtc_clock;
3321 	u32 divsel, phaseinc, auxdiv, phasedir = 0;
3322 	u32 temp;
3323 
3324 	mutex_lock(&dev_priv->dpio_lock);
3325 
3326 	/* It is necessary to ungate the pixclk gate prior to programming
3327 	 * the divisors, and gate it back when it is done.
3328 	 */
3329 	I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_GATE);
3330 
3331 	/* Disable SSCCTL */
3332 	intel_sbi_write(dev_priv, SBI_SSCCTL6,
3333 			intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK) |
3334 				SBI_SSCCTL_DISABLE,
3335 			SBI_ICLK);
3336 
3337 	/* 20MHz is a corner case which is out of range for the 7-bit divisor */
3338 	if (clock == 20000) {
3339 		auxdiv = 1;
3340 		divsel = 0x41;
3341 		phaseinc = 0x20;
3342 	} else {
3343 		/* The iCLK virtual clock root frequency is in MHz,
3344 		 * but the adjusted_mode->crtc_clock in in KHz. To get the
3345 		 * divisors, it is necessary to divide one by another, so we
3346 		 * convert the virtual clock precision to KHz here for higher
3347 		 * precision.
3348 		 */
3349 		u32 iclk_virtual_root_freq = 172800 * 1000;
3350 		u32 iclk_pi_range = 64;
3351 		u32 desired_divisor, msb_divisor_value, pi_value;
3352 
3353 		desired_divisor = (iclk_virtual_root_freq / clock);
3354 		msb_divisor_value = desired_divisor / iclk_pi_range;
3355 		pi_value = desired_divisor % iclk_pi_range;
3356 
3357 		auxdiv = 0;
3358 		divsel = msb_divisor_value - 2;
3359 		phaseinc = pi_value;
3360 	}
3361 
3362 	/* This should not happen with any sane values */
3363 	WARN_ON(SBI_SSCDIVINTPHASE_DIVSEL(divsel) &
3364 		~SBI_SSCDIVINTPHASE_DIVSEL_MASK);
3365 	WARN_ON(SBI_SSCDIVINTPHASE_DIR(phasedir) &
3366 		~SBI_SSCDIVINTPHASE_INCVAL_MASK);
3367 
3368 	DRM_DEBUG_KMS("iCLKIP clock: found settings for %dKHz refresh rate: auxdiv=%x, divsel=%x, phasedir=%x, phaseinc=%x\n",
3369 			clock,
3370 			auxdiv,
3371 			divsel,
3372 			phasedir,
3373 			phaseinc);
3374 
3375 	/* Program SSCDIVINTPHASE6 */
3376 	temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK);
3377 	temp &= ~SBI_SSCDIVINTPHASE_DIVSEL_MASK;
3378 	temp |= SBI_SSCDIVINTPHASE_DIVSEL(divsel);
3379 	temp &= ~SBI_SSCDIVINTPHASE_INCVAL_MASK;
3380 	temp |= SBI_SSCDIVINTPHASE_INCVAL(phaseinc);
3381 	temp |= SBI_SSCDIVINTPHASE_DIR(phasedir);
3382 	temp |= SBI_SSCDIVINTPHASE_PROPAGATE;
3383 	intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp, SBI_ICLK);
3384 
3385 	/* Program SSCAUXDIV */
3386 	temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK);
3387 	temp &= ~SBI_SSCAUXDIV_FINALDIV2SEL(1);
3388 	temp |= SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv);
3389 	intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp, SBI_ICLK);
3390 
3391 	/* Enable modulator and associated divider */
3392 	temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK);
3393 	temp &= ~SBI_SSCCTL_DISABLE;
3394 	intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK);
3395 
3396 	/* Wait for initialization time */
3397 	udelay(24);
3398 
3399 	I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_UNGATE);
3400 
3401 	mutex_unlock(&dev_priv->dpio_lock);
3402 }
3403 
3404 static void ironlake_pch_transcoder_set_timings(struct intel_crtc *crtc,
3405 						enum i915_pipe pch_transcoder)
3406 {
3407 	struct drm_device *dev = crtc->base.dev;
3408 	struct drm_i915_private *dev_priv = dev->dev_private;
3409 	enum transcoder cpu_transcoder = crtc->config.cpu_transcoder;
3410 
3411 	I915_WRITE(PCH_TRANS_HTOTAL(pch_transcoder),
3412 		   I915_READ(HTOTAL(cpu_transcoder)));
3413 	I915_WRITE(PCH_TRANS_HBLANK(pch_transcoder),
3414 		   I915_READ(HBLANK(cpu_transcoder)));
3415 	I915_WRITE(PCH_TRANS_HSYNC(pch_transcoder),
3416 		   I915_READ(HSYNC(cpu_transcoder)));
3417 
3418 	I915_WRITE(PCH_TRANS_VTOTAL(pch_transcoder),
3419 		   I915_READ(VTOTAL(cpu_transcoder)));
3420 	I915_WRITE(PCH_TRANS_VBLANK(pch_transcoder),
3421 		   I915_READ(VBLANK(cpu_transcoder)));
3422 	I915_WRITE(PCH_TRANS_VSYNC(pch_transcoder),
3423 		   I915_READ(VSYNC(cpu_transcoder)));
3424 	I915_WRITE(PCH_TRANS_VSYNCSHIFT(pch_transcoder),
3425 		   I915_READ(VSYNCSHIFT(cpu_transcoder)));
3426 }
3427 
3428 static void cpt_enable_fdi_bc_bifurcation(struct drm_device *dev)
3429 {
3430 	struct drm_i915_private *dev_priv = dev->dev_private;
3431 	uint32_t temp;
3432 
3433 	temp = I915_READ(SOUTH_CHICKEN1);
3434 	if (temp & FDI_BC_BIFURCATION_SELECT)
3435 		return;
3436 
3437 	WARN_ON(I915_READ(FDI_RX_CTL(PIPE_B)) & FDI_RX_ENABLE);
3438 	WARN_ON(I915_READ(FDI_RX_CTL(PIPE_C)) & FDI_RX_ENABLE);
3439 
3440 	temp |= FDI_BC_BIFURCATION_SELECT;
3441 	DRM_DEBUG_KMS("enabling fdi C rx\n");
3442 	I915_WRITE(SOUTH_CHICKEN1, temp);
3443 	POSTING_READ(SOUTH_CHICKEN1);
3444 }
3445 
3446 static void ivybridge_update_fdi_bc_bifurcation(struct intel_crtc *intel_crtc)
3447 {
3448 	struct drm_device *dev = intel_crtc->base.dev;
3449 	struct drm_i915_private *dev_priv = dev->dev_private;
3450 
3451 	switch (intel_crtc->pipe) {
3452 	case PIPE_A:
3453 		break;
3454 	case PIPE_B:
3455 		if (intel_crtc->config.fdi_lanes > 2)
3456 			WARN_ON(I915_READ(SOUTH_CHICKEN1) & FDI_BC_BIFURCATION_SELECT);
3457 		else
3458 			cpt_enable_fdi_bc_bifurcation(dev);
3459 
3460 		break;
3461 	case PIPE_C:
3462 		cpt_enable_fdi_bc_bifurcation(dev);
3463 
3464 		break;
3465 	default:
3466 		BUG();
3467 	}
3468 }
3469 
3470 /*
3471  * Enable PCH resources required for PCH ports:
3472  *   - PCH PLLs
3473  *   - FDI training & RX/TX
3474  *   - update transcoder timings
3475  *   - DP transcoding bits
3476  *   - transcoder
3477  */
3478 static void ironlake_pch_enable(struct drm_crtc *crtc)
3479 {
3480 	struct drm_device *dev = crtc->dev;
3481 	struct drm_i915_private *dev_priv = dev->dev_private;
3482 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3483 	int pipe = intel_crtc->pipe;
3484 	u32 reg, temp;
3485 
3486 	assert_pch_transcoder_disabled(dev_priv, pipe);
3487 
3488 	if (IS_IVYBRIDGE(dev))
3489 		ivybridge_update_fdi_bc_bifurcation(intel_crtc);
3490 
3491 	/* Write the TU size bits before fdi link training, so that error
3492 	 * detection works. */
3493 	I915_WRITE(FDI_RX_TUSIZE1(pipe),
3494 		   I915_READ(PIPE_DATA_M1(pipe)) & TU_SIZE_MASK);
3495 
3496 	/* For PCH output, training FDI link */
3497 	dev_priv->display.fdi_link_train(crtc);
3498 
3499 	/* We need to program the right clock selection before writing the pixel
3500 	 * mutliplier into the DPLL. */
3501 	if (HAS_PCH_CPT(dev)) {
3502 		u32 sel;
3503 
3504 		temp = I915_READ(PCH_DPLL_SEL);
3505 		temp |= TRANS_DPLL_ENABLE(pipe);
3506 		sel = TRANS_DPLLB_SEL(pipe);
3507 		if (intel_crtc->config.shared_dpll == DPLL_ID_PCH_PLL_B)
3508 			temp |= sel;
3509 		else
3510 			temp &= ~sel;
3511 		I915_WRITE(PCH_DPLL_SEL, temp);
3512 	}
3513 
3514 	/* XXX: pch pll's can be enabled any time before we enable the PCH
3515 	 * transcoder, and we actually should do this to not upset any PCH
3516 	 * transcoder that already use the clock when we share it.
3517 	 *
3518 	 * Note that enable_shared_dpll tries to do the right thing, but
3519 	 * get_shared_dpll unconditionally resets the pll - we need that to have
3520 	 * the right LVDS enable sequence. */
3521 	intel_enable_shared_dpll(intel_crtc);
3522 
3523 	/* set transcoder timing, panel must allow it */
3524 	assert_panel_unlocked(dev_priv, pipe);
3525 	ironlake_pch_transcoder_set_timings(intel_crtc, pipe);
3526 
3527 	intel_fdi_normal_train(crtc);
3528 
3529 	/* For PCH DP, enable TRANS_DP_CTL */
3530 	if (HAS_PCH_CPT(dev) &&
3531 	    (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
3532 	     intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))) {
3533 		u32 bpc = (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) >> 5;
3534 		reg = TRANS_DP_CTL(pipe);
3535 		temp = I915_READ(reg);
3536 		temp &= ~(TRANS_DP_PORT_SEL_MASK |
3537 			  TRANS_DP_SYNC_MASK |
3538 			  TRANS_DP_BPC_MASK);
3539 		temp |= (TRANS_DP_OUTPUT_ENABLE |
3540 			 TRANS_DP_ENH_FRAMING);
3541 		temp |= bpc << 9; /* same format but at 11:9 */
3542 
3543 		if (crtc->mode.flags & DRM_MODE_FLAG_PHSYNC)
3544 			temp |= TRANS_DP_HSYNC_ACTIVE_HIGH;
3545 		if (crtc->mode.flags & DRM_MODE_FLAG_PVSYNC)
3546 			temp |= TRANS_DP_VSYNC_ACTIVE_HIGH;
3547 
3548 		switch (intel_trans_dp_port_sel(crtc)) {
3549 		case PCH_DP_B:
3550 			temp |= TRANS_DP_PORT_SEL_B;
3551 			break;
3552 		case PCH_DP_C:
3553 			temp |= TRANS_DP_PORT_SEL_C;
3554 			break;
3555 		case PCH_DP_D:
3556 			temp |= TRANS_DP_PORT_SEL_D;
3557 			break;
3558 		default:
3559 			BUG();
3560 		}
3561 
3562 		I915_WRITE(reg, temp);
3563 	}
3564 
3565 	ironlake_enable_pch_transcoder(dev_priv, pipe);
3566 }
3567 
3568 static void lpt_pch_enable(struct drm_crtc *crtc)
3569 {
3570 	struct drm_device *dev = crtc->dev;
3571 	struct drm_i915_private *dev_priv = dev->dev_private;
3572 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3573 	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
3574 
3575 	assert_pch_transcoder_disabled(dev_priv, TRANSCODER_A);
3576 
3577 	lpt_program_iclkip(crtc);
3578 
3579 	/* Set transcoder timing. */
3580 	ironlake_pch_transcoder_set_timings(intel_crtc, PIPE_A);
3581 
3582 	lpt_enable_pch_transcoder(dev_priv, cpu_transcoder);
3583 }
3584 
3585 static void intel_put_shared_dpll(struct intel_crtc *crtc)
3586 {
3587 	struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
3588 
3589 	if (pll == NULL)
3590 		return;
3591 
3592 	if (pll->refcount == 0) {
3593 		WARN(1, "bad %s refcount\n", pll->name);
3594 		return;
3595 	}
3596 
3597 	if (--pll->refcount == 0) {
3598 		WARN_ON(pll->on);
3599 		WARN_ON(pll->active);
3600 	}
3601 
3602 	crtc->config.shared_dpll = DPLL_ID_PRIVATE;
3603 }
3604 
3605 static struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc)
3606 {
3607 	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
3608 	struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
3609 	enum intel_dpll_id i;
3610 
3611 	if (pll) {
3612 		DRM_DEBUG_KMS("CRTC:%d dropping existing %s\n",
3613 			      crtc->base.base.id, pll->name);
3614 		intel_put_shared_dpll(crtc);
3615 	}
3616 
3617 	if (HAS_PCH_IBX(dev_priv->dev)) {
3618 		/* Ironlake PCH has a fixed PLL->PCH pipe mapping. */
3619 		i = (enum intel_dpll_id) crtc->pipe;
3620 		pll = &dev_priv->shared_dplls[i];
3621 
3622 		DRM_DEBUG_KMS("CRTC:%d using pre-allocated %s\n",
3623 			      crtc->base.base.id, pll->name);
3624 
3625 		WARN_ON(pll->refcount);
3626 
3627 		goto found;
3628 	}
3629 
3630 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
3631 		pll = &dev_priv->shared_dplls[i];
3632 
3633 		/* Only want to check enabled timings first */
3634 		if (pll->refcount == 0)
3635 			continue;
3636 
3637 		if (memcmp(&crtc->config.dpll_hw_state, &pll->hw_state,
3638 			   sizeof(pll->hw_state)) == 0) {
3639 			DRM_DEBUG_KMS("CRTC:%d sharing existing %s (refcount %d, ative %d)\n",
3640 				      crtc->base.base.id,
3641 				      pll->name, pll->refcount, pll->active);
3642 
3643 			goto found;
3644 		}
3645 	}
3646 
3647 	/* Ok no matching timings, maybe there's a free one? */
3648 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
3649 		pll = &dev_priv->shared_dplls[i];
3650 		if (pll->refcount == 0) {
3651 			DRM_DEBUG_KMS("CRTC:%d allocated %s\n",
3652 				      crtc->base.base.id, pll->name);
3653 			goto found;
3654 		}
3655 	}
3656 
3657 	return NULL;
3658 
3659 found:
3660 	if (pll->refcount == 0)
3661 		pll->hw_state = crtc->config.dpll_hw_state;
3662 
3663 	crtc->config.shared_dpll = i;
3664 	DRM_DEBUG_DRIVER("using %s for pipe %c\n", pll->name,
3665 			 pipe_name(crtc->pipe));
3666 
3667 	pll->refcount++;
3668 
3669 	return pll;
3670 }
3671 
3672 static void cpt_verify_modeset(struct drm_device *dev, int pipe)
3673 {
3674 	struct drm_i915_private *dev_priv = dev->dev_private;
3675 	int dslreg = PIPEDSL(pipe);
3676 	u32 temp;
3677 
3678 	temp = I915_READ(dslreg);
3679 	udelay(500);
3680 	if (wait_for(I915_READ(dslreg) != temp, 5)) {
3681 		if (wait_for(I915_READ(dslreg) != temp, 5))
3682 			DRM_ERROR("mode set failed: pipe %c stuck\n", pipe_name(pipe));
3683 	}
3684 }
3685 
3686 static void ironlake_pfit_enable(struct intel_crtc *crtc)
3687 {
3688 	struct drm_device *dev = crtc->base.dev;
3689 	struct drm_i915_private *dev_priv = dev->dev_private;
3690 	int pipe = crtc->pipe;
3691 
3692 	if (crtc->config.pch_pfit.enabled) {
3693 		/* Force use of hard-coded filter coefficients
3694 		 * as some pre-programmed values are broken,
3695 		 * e.g. x201.
3696 		 */
3697 		if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
3698 			I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 |
3699 						 PF_PIPE_SEL_IVB(pipe));
3700 		else
3701 			I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
3702 		I915_WRITE(PF_WIN_POS(pipe), crtc->config.pch_pfit.pos);
3703 		I915_WRITE(PF_WIN_SZ(pipe), crtc->config.pch_pfit.size);
3704 	}
3705 }
3706 
3707 static void intel_enable_planes(struct drm_crtc *crtc)
3708 {
3709 	struct drm_device *dev = crtc->dev;
3710 	enum i915_pipe pipe = to_intel_crtc(crtc)->pipe;
3711 	struct drm_plane *plane;
3712 	struct intel_plane *intel_plane;
3713 
3714 	drm_for_each_legacy_plane(plane, &dev->mode_config.plane_list) {
3715 		intel_plane = to_intel_plane(plane);
3716 		if (intel_plane->pipe == pipe)
3717 			intel_plane_restore(&intel_plane->base);
3718 	}
3719 }
3720 
3721 static void intel_disable_planes(struct drm_crtc *crtc)
3722 {
3723 	struct drm_device *dev = crtc->dev;
3724 	enum i915_pipe pipe = to_intel_crtc(crtc)->pipe;
3725 	struct drm_plane *plane;
3726 	struct intel_plane *intel_plane;
3727 
3728 	drm_for_each_legacy_plane(plane, &dev->mode_config.plane_list) {
3729 		intel_plane = to_intel_plane(plane);
3730 		if (intel_plane->pipe == pipe)
3731 			intel_plane_disable(&intel_plane->base);
3732 	}
3733 }
3734 
3735 void hsw_enable_ips(struct intel_crtc *crtc)
3736 {
3737 	struct drm_device *dev = crtc->base.dev;
3738 	struct drm_i915_private *dev_priv = dev->dev_private;
3739 
3740 	if (!crtc->config.ips_enabled)
3741 		return;
3742 
3743 	/* We can only enable IPS after we enable a plane and wait for a vblank */
3744 	intel_wait_for_vblank(dev, crtc->pipe);
3745 
3746 	assert_plane_enabled(dev_priv, crtc->plane);
3747 	if (IS_BROADWELL(dev)) {
3748 		mutex_lock(&dev_priv->rps.hw_lock);
3749 		WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0xc0000000));
3750 		mutex_unlock(&dev_priv->rps.hw_lock);
3751 		/* Quoting Art Runyan: "its not safe to expect any particular
3752 		 * value in IPS_CTL bit 31 after enabling IPS through the
3753 		 * mailbox." Moreover, the mailbox may return a bogus state,
3754 		 * so we need to just enable it and continue on.
3755 		 */
3756 	} else {
3757 		I915_WRITE(IPS_CTL, IPS_ENABLE);
3758 		/* The bit only becomes 1 in the next vblank, so this wait here
3759 		 * is essentially intel_wait_for_vblank. If we don't have this
3760 		 * and don't wait for vblanks until the end of crtc_enable, then
3761 		 * the HW state readout code will complain that the expected
3762 		 * IPS_CTL value is not the one we read. */
3763 		if (wait_for(I915_READ_NOTRACE(IPS_CTL) & IPS_ENABLE, 50))
3764 			DRM_ERROR("Timed out waiting for IPS enable\n");
3765 	}
3766 }
3767 
3768 void hsw_disable_ips(struct intel_crtc *crtc)
3769 {
3770 	struct drm_device *dev = crtc->base.dev;
3771 	struct drm_i915_private *dev_priv = dev->dev_private;
3772 
3773 	if (!crtc->config.ips_enabled)
3774 		return;
3775 
3776 	assert_plane_enabled(dev_priv, crtc->plane);
3777 	if (IS_BROADWELL(dev)) {
3778 		mutex_lock(&dev_priv->rps.hw_lock);
3779 		WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0));
3780 		mutex_unlock(&dev_priv->rps.hw_lock);
3781 		/* wait for pcode to finish disabling IPS, which may take up to 42ms */
3782 		if (wait_for((I915_READ(IPS_CTL) & IPS_ENABLE) == 0, 42))
3783 			DRM_ERROR("Timed out waiting for IPS disable\n");
3784 	} else {
3785 		I915_WRITE(IPS_CTL, 0);
3786 		POSTING_READ(IPS_CTL);
3787 	}
3788 
3789 	/* We need to wait for a vblank before we can disable the plane. */
3790 	intel_wait_for_vblank(dev, crtc->pipe);
3791 }
3792 
3793 /** Loads the palette/gamma unit for the CRTC with the prepared values */
3794 static void intel_crtc_load_lut(struct drm_crtc *crtc)
3795 {
3796 	struct drm_device *dev = crtc->dev;
3797 	struct drm_i915_private *dev_priv = dev->dev_private;
3798 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3799 	enum i915_pipe pipe = intel_crtc->pipe;
3800 	int palreg = PALETTE(pipe);
3801 	int i;
3802 	bool reenable_ips = false;
3803 
3804 	/* The clocks have to be on to load the palette. */
3805 	if (!crtc->enabled || !intel_crtc->active)
3806 		return;
3807 
3808 	if (!HAS_PCH_SPLIT(dev_priv->dev)) {
3809 		if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DSI))
3810 			assert_dsi_pll_enabled(dev_priv);
3811 		else
3812 			assert_pll_enabled(dev_priv, pipe);
3813 	}
3814 
3815 	/* use legacy palette for Ironlake */
3816 	if (HAS_PCH_SPLIT(dev))
3817 		palreg = LGC_PALETTE(pipe);
3818 
3819 	/* Workaround : Do not read or write the pipe palette/gamma data while
3820 	 * GAMMA_MODE is configured for split gamma and IPS_CTL has IPS enabled.
3821 	 */
3822 	if (IS_HASWELL(dev) && intel_crtc->config.ips_enabled &&
3823 	    ((I915_READ(GAMMA_MODE(pipe)) & GAMMA_MODE_MODE_MASK) ==
3824 	     GAMMA_MODE_MODE_SPLIT)) {
3825 		hsw_disable_ips(intel_crtc);
3826 		reenable_ips = true;
3827 	}
3828 
3829 	for (i = 0; i < 256; i++) {
3830 		I915_WRITE(palreg + 4 * i,
3831 			   (intel_crtc->lut_r[i] << 16) |
3832 			   (intel_crtc->lut_g[i] << 8) |
3833 			   intel_crtc->lut_b[i]);
3834 	}
3835 
3836 	if (reenable_ips)
3837 		hsw_enable_ips(intel_crtc);
3838 }
3839 
3840 static void intel_crtc_dpms_overlay(struct intel_crtc *intel_crtc, bool enable)
3841 {
3842 	if (!enable && intel_crtc->overlay) {
3843 		struct drm_device *dev = intel_crtc->base.dev;
3844 		struct drm_i915_private *dev_priv = dev->dev_private;
3845 
3846 		mutex_lock(&dev->struct_mutex);
3847 		dev_priv->mm.interruptible = false;
3848 		(void) intel_overlay_switch_off(intel_crtc->overlay);
3849 		dev_priv->mm.interruptible = true;
3850 		mutex_unlock(&dev->struct_mutex);
3851 	}
3852 
3853 	/* Let userspace switch the overlay on again. In most cases userspace
3854 	 * has to recompute where to put it anyway.
3855 	 */
3856 }
3857 
3858 /**
3859  * i9xx_fixup_plane - ugly workaround for G45 to fire up the hardware
3860  * cursor plane briefly if not already running after enabling the display
3861  * plane.
3862  * This workaround avoids occasional blank screens when self refresh is
3863  * enabled.
3864  */
3865 static void
3866 g4x_fixup_plane(struct drm_i915_private *dev_priv, enum i915_pipe pipe)
3867 {
3868 	u32 cntl = I915_READ(CURCNTR(pipe));
3869 
3870 	if ((cntl & CURSOR_MODE) == 0) {
3871 		u32 fw_bcl_self = I915_READ(FW_BLC_SELF);
3872 
3873 		I915_WRITE(FW_BLC_SELF, fw_bcl_self & ~FW_BLC_SELF_EN);
3874 		I915_WRITE(CURCNTR(pipe), CURSOR_MODE_64_ARGB_AX);
3875 		intel_wait_for_vblank(dev_priv->dev, pipe);
3876 		I915_WRITE(CURCNTR(pipe), cntl);
3877 		I915_WRITE(CURBASE(pipe), I915_READ(CURBASE(pipe)));
3878 		I915_WRITE(FW_BLC_SELF, fw_bcl_self);
3879 	}
3880 }
3881 
3882 static void intel_crtc_enable_planes(struct drm_crtc *crtc)
3883 {
3884 	struct drm_device *dev = crtc->dev;
3885 	struct drm_i915_private *dev_priv = dev->dev_private;
3886 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3887 	int pipe = intel_crtc->pipe;
3888 	int plane = intel_crtc->plane;
3889 
3890 	intel_enable_primary_hw_plane(dev_priv, plane, pipe);
3891 	intel_enable_planes(crtc);
3892 	/* The fixup needs to happen before cursor is enabled */
3893 	if (IS_G4X(dev))
3894 		g4x_fixup_plane(dev_priv, pipe);
3895 	intel_crtc_update_cursor(crtc, true);
3896 	intel_crtc_dpms_overlay(intel_crtc, true);
3897 
3898 	hsw_enable_ips(intel_crtc);
3899 
3900 	mutex_lock(&dev->struct_mutex);
3901 	intel_update_fbc(dev);
3902 	intel_edp_psr_update(dev);
3903 	mutex_unlock(&dev->struct_mutex);
3904 }
3905 
3906 static void intel_crtc_disable_planes(struct drm_crtc *crtc)
3907 {
3908 	struct drm_device *dev = crtc->dev;
3909 	struct drm_i915_private *dev_priv = dev->dev_private;
3910 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3911 	int pipe = intel_crtc->pipe;
3912 	int plane = intel_crtc->plane;
3913 
3914 	intel_crtc_wait_for_pending_flips(crtc);
3915 	drm_crtc_vblank_off(crtc);
3916 
3917 	if (dev_priv->fbc.plane == plane)
3918 		intel_disable_fbc(dev);
3919 
3920 	hsw_disable_ips(intel_crtc);
3921 
3922 	intel_crtc_dpms_overlay(intel_crtc, false);
3923 	intel_crtc_update_cursor(crtc, false);
3924 	intel_disable_planes(crtc);
3925 	intel_disable_primary_hw_plane(dev_priv, plane, pipe);
3926 }
3927 
3928 static void ironlake_crtc_enable(struct drm_crtc *crtc)
3929 {
3930 	struct drm_device *dev = crtc->dev;
3931 	struct drm_i915_private *dev_priv = dev->dev_private;
3932 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3933 	struct intel_encoder *encoder;
3934 	int pipe = intel_crtc->pipe;
3935 	enum plane plane = intel_crtc->plane;
3936 
3937 	WARN_ON(!crtc->enabled);
3938 
3939 	if (intel_crtc->active)
3940 		return;
3941 
3942 	if (intel_crtc->config.has_pch_encoder)
3943 		intel_prepare_shared_dpll(intel_crtc);
3944 
3945 	if (intel_crtc->config.has_dp_encoder)
3946 		intel_dp_set_m_n(intel_crtc);
3947 
3948 	intel_set_pipe_timings(intel_crtc);
3949 
3950 	if (intel_crtc->config.has_pch_encoder) {
3951 		intel_cpu_transcoder_set_m_n(intel_crtc,
3952 					     &intel_crtc->config.fdi_m_n);
3953 	}
3954 
3955 	ironlake_set_pipeconf(crtc);
3956 
3957 	/* Set up the display plane register */
3958 	I915_WRITE(DSPCNTR(plane), DISPPLANE_GAMMA_ENABLE);
3959 	POSTING_READ(DSPCNTR(plane));
3960 
3961 	dev_priv->display.update_primary_plane(crtc, crtc->primary->fb,
3962 					       crtc->x, crtc->y);
3963 
3964 	intel_crtc->active = true;
3965 
3966 	intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
3967 	intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
3968 
3969 	for_each_encoder_on_crtc(dev, crtc, encoder)
3970 		if (encoder->pre_enable)
3971 			encoder->pre_enable(encoder);
3972 
3973 	if (intel_crtc->config.has_pch_encoder) {
3974 		/* Note: FDI PLL enabling _must_ be done before we enable the
3975 		 * cpu pipes, hence this is separate from all the other fdi/pch
3976 		 * enabling. */
3977 		ironlake_fdi_pll_enable(intel_crtc);
3978 	} else {
3979 		assert_fdi_tx_disabled(dev_priv, pipe);
3980 		assert_fdi_rx_disabled(dev_priv, pipe);
3981 	}
3982 
3983 	ironlake_pfit_enable(intel_crtc);
3984 
3985 	/*
3986 	 * On ILK+ LUT must be loaded before the pipe is running but with
3987 	 * clocks enabled
3988 	 */
3989 	intel_crtc_load_lut(crtc);
3990 
3991 	intel_update_watermarks(crtc);
3992 	intel_enable_pipe(intel_crtc);
3993 
3994 	if (intel_crtc->config.has_pch_encoder)
3995 		ironlake_pch_enable(crtc);
3996 
3997 	for_each_encoder_on_crtc(dev, crtc, encoder)
3998 		encoder->enable(encoder);
3999 
4000 	if (HAS_PCH_CPT(dev))
4001 		cpt_verify_modeset(dev, intel_crtc->pipe);
4002 
4003 	intel_crtc_enable_planes(crtc);
4004 
4005 	drm_crtc_vblank_on(crtc);
4006 }
4007 
4008 /* IPS only exists on ULT machines and is tied to pipe A. */
4009 static bool hsw_crtc_supports_ips(struct intel_crtc *crtc)
4010 {
4011 	return HAS_IPS(crtc->base.dev) && crtc->pipe == PIPE_A;
4012 }
4013 
4014 /*
4015  * This implements the workaround described in the "notes" section of the mode
4016  * set sequence documentation. When going from no pipes or single pipe to
4017  * multiple pipes, and planes are enabled after the pipe, we need to wait at
4018  * least 2 vblanks on the first pipe before enabling planes on the second pipe.
4019  */
4020 static void haswell_mode_set_planes_workaround(struct intel_crtc *crtc)
4021 {
4022 	struct drm_device *dev = crtc->base.dev;
4023 	struct intel_crtc *crtc_it, *other_active_crtc = NULL;
4024 
4025 	/* We want to get the other_active_crtc only if there's only 1 other
4026 	 * active crtc. */
4027 	for_each_intel_crtc(dev, crtc_it) {
4028 		if (!crtc_it->active || crtc_it == crtc)
4029 			continue;
4030 
4031 		if (other_active_crtc)
4032 			return;
4033 
4034 		other_active_crtc = crtc_it;
4035 	}
4036 	if (!other_active_crtc)
4037 		return;
4038 
4039 	intel_wait_for_vblank(dev, other_active_crtc->pipe);
4040 	intel_wait_for_vblank(dev, other_active_crtc->pipe);
4041 }
4042 
4043 static void haswell_crtc_enable(struct drm_crtc *crtc)
4044 {
4045 	struct drm_device *dev = crtc->dev;
4046 	struct drm_i915_private *dev_priv = dev->dev_private;
4047 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4048 	struct intel_encoder *encoder;
4049 	int pipe = intel_crtc->pipe;
4050 	enum plane plane = intel_crtc->plane;
4051 
4052 	WARN_ON(!crtc->enabled);
4053 
4054 	if (intel_crtc->active)
4055 		return;
4056 
4057 	if (intel_crtc->config.has_dp_encoder)
4058 		intel_dp_set_m_n(intel_crtc);
4059 
4060 	intel_set_pipe_timings(intel_crtc);
4061 
4062 	if (intel_crtc->config.has_pch_encoder) {
4063 		intel_cpu_transcoder_set_m_n(intel_crtc,
4064 					     &intel_crtc->config.fdi_m_n);
4065 	}
4066 
4067 	haswell_set_pipeconf(crtc);
4068 
4069 	intel_set_pipe_csc(crtc);
4070 
4071 	/* Set up the display plane register */
4072 	I915_WRITE(DSPCNTR(plane), DISPPLANE_GAMMA_ENABLE | DISPPLANE_PIPE_CSC_ENABLE);
4073 	POSTING_READ(DSPCNTR(plane));
4074 
4075 	dev_priv->display.update_primary_plane(crtc, crtc->primary->fb,
4076 					       crtc->x, crtc->y);
4077 
4078 	intel_crtc->active = true;
4079 
4080 	intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
4081 	if (intel_crtc->config.has_pch_encoder)
4082 		intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
4083 
4084 	if (intel_crtc->config.has_pch_encoder)
4085 		dev_priv->display.fdi_link_train(crtc);
4086 
4087 	for_each_encoder_on_crtc(dev, crtc, encoder)
4088 		if (encoder->pre_enable)
4089 			encoder->pre_enable(encoder);
4090 
4091 	intel_ddi_enable_pipe_clock(intel_crtc);
4092 
4093 	ironlake_pfit_enable(intel_crtc);
4094 
4095 	/*
4096 	 * On ILK+ LUT must be loaded before the pipe is running but with
4097 	 * clocks enabled
4098 	 */
4099 	intel_crtc_load_lut(crtc);
4100 
4101 	intel_ddi_set_pipe_settings(crtc);
4102 	intel_ddi_enable_transcoder_func(crtc);
4103 
4104 	intel_update_watermarks(crtc);
4105 	intel_enable_pipe(intel_crtc);
4106 
4107 	if (intel_crtc->config.has_pch_encoder)
4108 		lpt_pch_enable(crtc);
4109 
4110 	for_each_encoder_on_crtc(dev, crtc, encoder) {
4111 		encoder->enable(encoder);
4112 		intel_opregion_notify_encoder(encoder, true);
4113 	}
4114 
4115 	/* If we change the relative order between pipe/planes enabling, we need
4116 	 * to change the workaround. */
4117 	haswell_mode_set_planes_workaround(intel_crtc);
4118 	intel_crtc_enable_planes(crtc);
4119 
4120 	drm_crtc_vblank_on(crtc);
4121 }
4122 
4123 static void ironlake_pfit_disable(struct intel_crtc *crtc)
4124 {
4125 	struct drm_device *dev = crtc->base.dev;
4126 	struct drm_i915_private *dev_priv = dev->dev_private;
4127 	int pipe = crtc->pipe;
4128 
4129 	/* To avoid upsetting the power well on haswell only disable the pfit if
4130 	 * it's in use. The hw state code will make sure we get this right. */
4131 	if (crtc->config.pch_pfit.enabled) {
4132 		I915_WRITE(PF_CTL(pipe), 0);
4133 		I915_WRITE(PF_WIN_POS(pipe), 0);
4134 		I915_WRITE(PF_WIN_SZ(pipe), 0);
4135 	}
4136 }
4137 
4138 static void ironlake_crtc_disable(struct drm_crtc *crtc)
4139 {
4140 	struct drm_device *dev = crtc->dev;
4141 	struct drm_i915_private *dev_priv = dev->dev_private;
4142 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4143 	struct intel_encoder *encoder;
4144 	int pipe = intel_crtc->pipe;
4145 	u32 reg, temp;
4146 
4147 	if (!intel_crtc->active)
4148 		return;
4149 
4150 	intel_crtc_disable_planes(crtc);
4151 
4152 	for_each_encoder_on_crtc(dev, crtc, encoder)
4153 		encoder->disable(encoder);
4154 
4155 	if (intel_crtc->config.has_pch_encoder)
4156 		intel_set_pch_fifo_underrun_reporting(dev, pipe, false);
4157 
4158 	intel_disable_pipe(dev_priv, pipe);
4159 
4160 	ironlake_pfit_disable(intel_crtc);
4161 
4162 	for_each_encoder_on_crtc(dev, crtc, encoder)
4163 		if (encoder->post_disable)
4164 			encoder->post_disable(encoder);
4165 
4166 	if (intel_crtc->config.has_pch_encoder) {
4167 		ironlake_fdi_disable(crtc);
4168 
4169 		ironlake_disable_pch_transcoder(dev_priv, pipe);
4170 		intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
4171 
4172 		if (HAS_PCH_CPT(dev)) {
4173 			/* disable TRANS_DP_CTL */
4174 			reg = TRANS_DP_CTL(pipe);
4175 			temp = I915_READ(reg);
4176 			temp &= ~(TRANS_DP_OUTPUT_ENABLE |
4177 				  TRANS_DP_PORT_SEL_MASK);
4178 			temp |= TRANS_DP_PORT_SEL_NONE;
4179 			I915_WRITE(reg, temp);
4180 
4181 			/* disable DPLL_SEL */
4182 			temp = I915_READ(PCH_DPLL_SEL);
4183 			temp &= ~(TRANS_DPLL_ENABLE(pipe) | TRANS_DPLLB_SEL(pipe));
4184 			I915_WRITE(PCH_DPLL_SEL, temp);
4185 		}
4186 
4187 		/* disable PCH DPLL */
4188 		intel_disable_shared_dpll(intel_crtc);
4189 
4190 		ironlake_fdi_pll_disable(intel_crtc);
4191 	}
4192 
4193 	intel_crtc->active = false;
4194 	intel_update_watermarks(crtc);
4195 
4196 	mutex_lock(&dev->struct_mutex);
4197 	intel_update_fbc(dev);
4198 	intel_edp_psr_update(dev);
4199 	mutex_unlock(&dev->struct_mutex);
4200 }
4201 
4202 static void haswell_crtc_disable(struct drm_crtc *crtc)
4203 {
4204 	struct drm_device *dev = crtc->dev;
4205 	struct drm_i915_private *dev_priv = dev->dev_private;
4206 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4207 	struct intel_encoder *encoder;
4208 	int pipe = intel_crtc->pipe;
4209 	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
4210 
4211 	if (!intel_crtc->active)
4212 		return;
4213 
4214 	intel_crtc_disable_planes(crtc);
4215 
4216 	for_each_encoder_on_crtc(dev, crtc, encoder) {
4217 		intel_opregion_notify_encoder(encoder, false);
4218 		encoder->disable(encoder);
4219 	}
4220 
4221 	if (intel_crtc->config.has_pch_encoder)
4222 		intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, false);
4223 	intel_disable_pipe(dev_priv, pipe);
4224 
4225 	intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder);
4226 
4227 	ironlake_pfit_disable(intel_crtc);
4228 
4229 	intel_ddi_disable_pipe_clock(intel_crtc);
4230 
4231 	for_each_encoder_on_crtc(dev, crtc, encoder)
4232 		if (encoder->post_disable)
4233 			encoder->post_disable(encoder);
4234 
4235 	if (intel_crtc->config.has_pch_encoder) {
4236 		lpt_disable_pch_transcoder(dev_priv);
4237 		intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
4238 		intel_ddi_fdi_disable(crtc);
4239 	}
4240 
4241 	intel_crtc->active = false;
4242 	intel_update_watermarks(crtc);
4243 
4244 	mutex_lock(&dev->struct_mutex);
4245 	intel_update_fbc(dev);
4246 	intel_edp_psr_update(dev);
4247 	mutex_unlock(&dev->struct_mutex);
4248 }
4249 
4250 static void ironlake_crtc_off(struct drm_crtc *crtc)
4251 {
4252 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4253 	intel_put_shared_dpll(intel_crtc);
4254 }
4255 
4256 static void haswell_crtc_off(struct drm_crtc *crtc)
4257 {
4258 	intel_ddi_put_crtc_pll(crtc);
4259 }
4260 
4261 static void i9xx_pfit_enable(struct intel_crtc *crtc)
4262 {
4263 	struct drm_device *dev = crtc->base.dev;
4264 	struct drm_i915_private *dev_priv = dev->dev_private;
4265 	struct intel_crtc_config *pipe_config = &crtc->config;
4266 
4267 	if (!crtc->config.gmch_pfit.control)
4268 		return;
4269 
4270 	/*
4271 	 * The panel fitter should only be adjusted whilst the pipe is disabled,
4272 	 * according to register description and PRM.
4273 	 */
4274 	WARN_ON(I915_READ(PFIT_CONTROL) & PFIT_ENABLE);
4275 	assert_pipe_disabled(dev_priv, crtc->pipe);
4276 
4277 	I915_WRITE(PFIT_PGM_RATIOS, pipe_config->gmch_pfit.pgm_ratios);
4278 	I915_WRITE(PFIT_CONTROL, pipe_config->gmch_pfit.control);
4279 
4280 	/* Border color in case we don't scale up to the full screen. Black by
4281 	 * default, change to something else for debugging. */
4282 	I915_WRITE(BCLRPAT(crtc->pipe), 0);
4283 }
4284 
4285 #define for_each_power_domain(domain, mask)				\
4286 	for ((domain) = 0; (domain) < POWER_DOMAIN_NUM; (domain)++)	\
4287 		if ((1 << (domain)) & (mask))
4288 
4289 enum intel_display_power_domain
4290 intel_display_port_power_domain(struct intel_encoder *intel_encoder)
4291 {
4292 	struct drm_device *dev = intel_encoder->base.dev;
4293 	struct intel_digital_port *intel_dig_port;
4294 
4295 	switch (intel_encoder->type) {
4296 	case INTEL_OUTPUT_UNKNOWN:
4297 		/* Only DDI platforms should ever use this output type */
4298 		WARN_ON_ONCE(!HAS_DDI(dev));
4299 	case INTEL_OUTPUT_DISPLAYPORT:
4300 	case INTEL_OUTPUT_HDMI:
4301 	case INTEL_OUTPUT_EDP:
4302 		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
4303 		switch (intel_dig_port->port) {
4304 		case PORT_A:
4305 			return POWER_DOMAIN_PORT_DDI_A_4_LANES;
4306 		case PORT_B:
4307 			return POWER_DOMAIN_PORT_DDI_B_4_LANES;
4308 		case PORT_C:
4309 			return POWER_DOMAIN_PORT_DDI_C_4_LANES;
4310 		case PORT_D:
4311 			return POWER_DOMAIN_PORT_DDI_D_4_LANES;
4312 		default:
4313 			WARN_ON_ONCE(1);
4314 			return POWER_DOMAIN_PORT_OTHER;
4315 		}
4316 	case INTEL_OUTPUT_ANALOG:
4317 		return POWER_DOMAIN_PORT_CRT;
4318 	case INTEL_OUTPUT_DSI:
4319 		return POWER_DOMAIN_PORT_DSI;
4320 	default:
4321 		return POWER_DOMAIN_PORT_OTHER;
4322 	}
4323 }
4324 
4325 static unsigned long get_crtc_power_domains(struct drm_crtc *crtc)
4326 {
4327 	struct drm_device *dev = crtc->dev;
4328 	struct intel_encoder *intel_encoder;
4329 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4330 	enum i915_pipe pipe = intel_crtc->pipe;
4331 	bool pfit_enabled = intel_crtc->config.pch_pfit.enabled;
4332 	unsigned long mask;
4333 	enum transcoder transcoder;
4334 
4335 	transcoder = intel_pipe_to_cpu_transcoder(dev->dev_private, pipe);
4336 
4337 	mask = BIT(POWER_DOMAIN_PIPE(pipe));
4338 	mask |= BIT(POWER_DOMAIN_TRANSCODER(transcoder));
4339 	if (pfit_enabled)
4340 		mask |= BIT(POWER_DOMAIN_PIPE_PANEL_FITTER(pipe));
4341 
4342 	for_each_encoder_on_crtc(dev, crtc, intel_encoder)
4343 		mask |= BIT(intel_display_port_power_domain(intel_encoder));
4344 
4345 	return mask;
4346 }
4347 
4348 void intel_display_set_init_power(struct drm_i915_private *dev_priv,
4349 				  bool enable)
4350 {
4351 	if (dev_priv->power_domains.init_power_on == enable)
4352 		return;
4353 
4354 	if (enable)
4355 		intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
4356 	else
4357 		intel_display_power_put(dev_priv, POWER_DOMAIN_INIT);
4358 
4359 	dev_priv->power_domains.init_power_on = enable;
4360 }
4361 
4362 static void modeset_update_crtc_power_domains(struct drm_device *dev)
4363 {
4364 	struct drm_i915_private *dev_priv = dev->dev_private;
4365 	unsigned long pipe_domains[I915_MAX_PIPES] = { 0, };
4366 	struct intel_crtc *crtc;
4367 
4368 	/*
4369 	 * First get all needed power domains, then put all unneeded, to avoid
4370 	 * any unnecessary toggling of the power wells.
4371 	 */
4372 	for_each_intel_crtc(dev, crtc) {
4373 		enum intel_display_power_domain domain;
4374 
4375 		if (!crtc->base.enabled)
4376 			continue;
4377 
4378 		pipe_domains[crtc->pipe] = get_crtc_power_domains(&crtc->base);
4379 
4380 		for_each_power_domain(domain, pipe_domains[crtc->pipe])
4381 			intel_display_power_get(dev_priv, domain);
4382 	}
4383 
4384 	for_each_intel_crtc(dev, crtc) {
4385 		enum intel_display_power_domain domain;
4386 
4387 		for_each_power_domain(domain, crtc->enabled_power_domains)
4388 			intel_display_power_put(dev_priv, domain);
4389 
4390 		crtc->enabled_power_domains = pipe_domains[crtc->pipe];
4391 	}
4392 
4393 	intel_display_set_init_power(dev_priv, false);
4394 }
4395 
4396 int valleyview_get_vco(struct drm_i915_private *dev_priv)
4397 {
4398 	int hpll_freq, vco_freq[] = { 800, 1600, 2000, 2400 };
4399 
4400 	/* Obtain SKU information */
4401 	mutex_lock(&dev_priv->dpio_lock);
4402 	hpll_freq = vlv_cck_read(dev_priv, CCK_FUSE_REG) &
4403 		CCK_FUSE_HPLL_FREQ_MASK;
4404 	mutex_unlock(&dev_priv->dpio_lock);
4405 
4406 	return vco_freq[hpll_freq];
4407 }
4408 
4409 /* Adjust CDclk dividers to allow high res or save power if possible */
4410 static void valleyview_set_cdclk(struct drm_device *dev, int cdclk)
4411 {
4412 	struct drm_i915_private *dev_priv = dev->dev_private;
4413 	u32 val, cmd;
4414 
4415 	WARN_ON(valleyview_cur_cdclk(dev_priv) != dev_priv->vlv_cdclk_freq);
4416 	dev_priv->vlv_cdclk_freq = cdclk;
4417 
4418 	if (cdclk >= 320) /* jump to highest voltage for 400MHz too */
4419 		cmd = 2;
4420 	else if (cdclk == 266)
4421 		cmd = 1;
4422 	else
4423 		cmd = 0;
4424 
4425 	mutex_lock(&dev_priv->rps.hw_lock);
4426 	val = vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ);
4427 	val &= ~DSPFREQGUAR_MASK;
4428 	val |= (cmd << DSPFREQGUAR_SHIFT);
4429 	vlv_punit_write(dev_priv, PUNIT_REG_DSPFREQ, val);
4430 	if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ) &
4431 		      DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT),
4432 		     50)) {
4433 		DRM_ERROR("timed out waiting for CDclk change\n");
4434 	}
4435 	mutex_unlock(&dev_priv->rps.hw_lock);
4436 
4437 	if (cdclk == 400) {
4438 		u32 divider, vco;
4439 
4440 		vco = valleyview_get_vco(dev_priv);
4441 		divider = ((vco << 1) / cdclk) - 1;
4442 
4443 		mutex_lock(&dev_priv->dpio_lock);
4444 		/* adjust cdclk divider */
4445 		val = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
4446 		val &= ~0xf;
4447 		val |= divider;
4448 		vlv_cck_write(dev_priv, CCK_DISPLAY_CLOCK_CONTROL, val);
4449 		mutex_unlock(&dev_priv->dpio_lock);
4450 	}
4451 
4452 	mutex_lock(&dev_priv->dpio_lock);
4453 	/* adjust self-refresh exit latency value */
4454 	val = vlv_bunit_read(dev_priv, BUNIT_REG_BISOC);
4455 	val &= ~0x7f;
4456 
4457 	/*
4458 	 * For high bandwidth configs, we set a higher latency in the bunit
4459 	 * so that the core display fetch happens in time to avoid underruns.
4460 	 */
4461 	if (cdclk == 400)
4462 		val |= 4500 / 250; /* 4.5 usec */
4463 	else
4464 		val |= 3000 / 250; /* 3.0 usec */
4465 	vlv_bunit_write(dev_priv, BUNIT_REG_BISOC, val);
4466 	mutex_unlock(&dev_priv->dpio_lock);
4467 
4468 	/* Since we changed the CDclk, we need to update the GMBUSFREQ too */
4469 	intel_i2c_reset(dev);
4470 }
4471 
4472 int valleyview_cur_cdclk(struct drm_i915_private *dev_priv)
4473 {
4474 	int cur_cdclk, vco;
4475 	int divider;
4476 
4477 	vco = valleyview_get_vco(dev_priv);
4478 
4479 	mutex_lock(&dev_priv->dpio_lock);
4480 	divider = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
4481 	mutex_unlock(&dev_priv->dpio_lock);
4482 
4483 	divider &= 0xf;
4484 
4485 	cur_cdclk = (vco << 1) / (divider + 1);
4486 
4487 	return cur_cdclk;
4488 }
4489 
4490 static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv,
4491 				 int max_pixclk)
4492 {
4493 	/*
4494 	 * Really only a few cases to deal with, as only 4 CDclks are supported:
4495 	 *   200MHz
4496 	 *   267MHz
4497 	 *   320MHz
4498 	 *   400MHz
4499 	 * So we check to see whether we're above 90% of the lower bin and
4500 	 * adjust if needed.
4501 	 */
4502 	if (max_pixclk > 288000) {
4503 		return 400;
4504 	} else if (max_pixclk > 240000) {
4505 		return 320;
4506 	} else
4507 		return 266;
4508 	/* Looks like the 200MHz CDclk freq doesn't work on some configs */
4509 }
4510 
4511 /* compute the max pixel clock for new configuration */
4512 static int intel_mode_max_pixclk(struct drm_i915_private *dev_priv)
4513 {
4514 	struct drm_device *dev = dev_priv->dev;
4515 	struct intel_crtc *intel_crtc;
4516 	int max_pixclk = 0;
4517 
4518 	for_each_intel_crtc(dev, intel_crtc) {
4519 		if (intel_crtc->new_enabled)
4520 			max_pixclk = max(max_pixclk,
4521 					 intel_crtc->new_config->adjusted_mode.crtc_clock);
4522 	}
4523 
4524 	return max_pixclk;
4525 }
4526 
4527 static void valleyview_modeset_global_pipes(struct drm_device *dev,
4528 					    unsigned *prepare_pipes)
4529 {
4530 	struct drm_i915_private *dev_priv = dev->dev_private;
4531 	struct intel_crtc *intel_crtc;
4532 	int max_pixclk = intel_mode_max_pixclk(dev_priv);
4533 
4534 	if (valleyview_calc_cdclk(dev_priv, max_pixclk) ==
4535 	    dev_priv->vlv_cdclk_freq)
4536 		return;
4537 
4538 	/* disable/enable all currently active pipes while we change cdclk */
4539 	for_each_intel_crtc(dev, intel_crtc)
4540 		if (intel_crtc->base.enabled)
4541 			*prepare_pipes |= (1 << intel_crtc->pipe);
4542 }
4543 
4544 static void valleyview_modeset_global_resources(struct drm_device *dev)
4545 {
4546 	struct drm_i915_private *dev_priv = dev->dev_private;
4547 	int max_pixclk = intel_mode_max_pixclk(dev_priv);
4548 	int req_cdclk = valleyview_calc_cdclk(dev_priv, max_pixclk);
4549 
4550 	if (req_cdclk != dev_priv->vlv_cdclk_freq)
4551 		valleyview_set_cdclk(dev, req_cdclk);
4552 	modeset_update_crtc_power_domains(dev);
4553 }
4554 
4555 static void valleyview_crtc_enable(struct drm_crtc *crtc)
4556 {
4557 	struct drm_device *dev = crtc->dev;
4558 	struct drm_i915_private *dev_priv = dev->dev_private;
4559 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4560 	struct intel_encoder *encoder;
4561 	int pipe = intel_crtc->pipe;
4562 	int plane = intel_crtc->plane;
4563 	bool is_dsi;
4564 	u32 dspcntr;
4565 
4566 	WARN_ON(!crtc->enabled);
4567 
4568 	if (intel_crtc->active)
4569 		return;
4570 
4571 	is_dsi = intel_pipe_has_type(crtc, INTEL_OUTPUT_DSI);
4572 
4573 	if (!is_dsi && !IS_CHERRYVIEW(dev))
4574 		vlv_prepare_pll(intel_crtc);
4575 
4576 	/* Set up the display plane register */
4577 	dspcntr = DISPPLANE_GAMMA_ENABLE;
4578 
4579 	if (intel_crtc->config.has_dp_encoder)
4580 		intel_dp_set_m_n(intel_crtc);
4581 
4582 	intel_set_pipe_timings(intel_crtc);
4583 
4584 	/* pipesrc and dspsize control the size that is scaled from,
4585 	 * which should always be the user's requested size.
4586 	 */
4587 	I915_WRITE(DSPSIZE(plane),
4588 		   ((intel_crtc->config.pipe_src_h - 1) << 16) |
4589 		   (intel_crtc->config.pipe_src_w - 1));
4590 	I915_WRITE(DSPPOS(plane), 0);
4591 
4592 	i9xx_set_pipeconf(intel_crtc);
4593 
4594 	I915_WRITE(DSPCNTR(plane), dspcntr);
4595 	POSTING_READ(DSPCNTR(plane));
4596 
4597 	dev_priv->display.update_primary_plane(crtc, crtc->primary->fb,
4598 					       crtc->x, crtc->y);
4599 
4600 	intel_crtc->active = true;
4601 
4602 	intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
4603 
4604 	for_each_encoder_on_crtc(dev, crtc, encoder)
4605 		if (encoder->pre_pll_enable)
4606 			encoder->pre_pll_enable(encoder);
4607 
4608 	if (!is_dsi) {
4609 		if (IS_CHERRYVIEW(dev))
4610 			chv_enable_pll(intel_crtc);
4611 		else
4612 			vlv_enable_pll(intel_crtc);
4613 	}
4614 
4615 	for_each_encoder_on_crtc(dev, crtc, encoder)
4616 		if (encoder->pre_enable)
4617 			encoder->pre_enable(encoder);
4618 
4619 	i9xx_pfit_enable(intel_crtc);
4620 
4621 	intel_crtc_load_lut(crtc);
4622 
4623 	intel_update_watermarks(crtc);
4624 	intel_enable_pipe(intel_crtc);
4625 
4626 	for_each_encoder_on_crtc(dev, crtc, encoder)
4627 		encoder->enable(encoder);
4628 
4629 	intel_crtc_enable_planes(crtc);
4630 
4631 	drm_crtc_vblank_on(crtc);
4632 
4633 	/* Underruns don't raise interrupts, so check manually. */
4634 	i9xx_check_fifo_underruns(dev);
4635 }
4636 
4637 static void i9xx_set_pll_dividers(struct intel_crtc *crtc)
4638 {
4639 	struct drm_device *dev = crtc->base.dev;
4640 	struct drm_i915_private *dev_priv = dev->dev_private;
4641 
4642 	I915_WRITE(FP0(crtc->pipe), crtc->config.dpll_hw_state.fp0);
4643 	I915_WRITE(FP1(crtc->pipe), crtc->config.dpll_hw_state.fp1);
4644 }
4645 
4646 static void i9xx_crtc_enable(struct drm_crtc *crtc)
4647 {
4648 	struct drm_device *dev = crtc->dev;
4649 	struct drm_i915_private *dev_priv = dev->dev_private;
4650 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4651 	struct intel_encoder *encoder;
4652 	int pipe = intel_crtc->pipe;
4653 	int plane = intel_crtc->plane;
4654 	u32 dspcntr;
4655 
4656 	WARN_ON(!crtc->enabled);
4657 
4658 	if (intel_crtc->active)
4659 		return;
4660 
4661 	i9xx_set_pll_dividers(intel_crtc);
4662 
4663 	/* Set up the display plane register */
4664 	dspcntr = DISPPLANE_GAMMA_ENABLE;
4665 
4666 	if (pipe == 0)
4667 		dspcntr &= ~DISPPLANE_SEL_PIPE_MASK;
4668 	else
4669 		dspcntr |= DISPPLANE_SEL_PIPE_B;
4670 
4671 	if (intel_crtc->config.has_dp_encoder)
4672 		intel_dp_set_m_n(intel_crtc);
4673 
4674 	intel_set_pipe_timings(intel_crtc);
4675 
4676 	/* pipesrc and dspsize control the size that is scaled from,
4677 	 * which should always be the user's requested size.
4678 	 */
4679 	I915_WRITE(DSPSIZE(plane),
4680 		   ((intel_crtc->config.pipe_src_h - 1) << 16) |
4681 		   (intel_crtc->config.pipe_src_w - 1));
4682 	I915_WRITE(DSPPOS(plane), 0);
4683 
4684 	i9xx_set_pipeconf(intel_crtc);
4685 
4686 	I915_WRITE(DSPCNTR(plane), dspcntr);
4687 	POSTING_READ(DSPCNTR(plane));
4688 
4689 	dev_priv->display.update_primary_plane(crtc, crtc->primary->fb,
4690 					       crtc->x, crtc->y);
4691 
4692 	intel_crtc->active = true;
4693 
4694 	if (!IS_GEN2(dev))
4695 		intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
4696 
4697 	for_each_encoder_on_crtc(dev, crtc, encoder)
4698 		if (encoder->pre_enable)
4699 			encoder->pre_enable(encoder);
4700 
4701 	i9xx_enable_pll(intel_crtc);
4702 
4703 	i9xx_pfit_enable(intel_crtc);
4704 
4705 	intel_crtc_load_lut(crtc);
4706 
4707 	intel_update_watermarks(crtc);
4708 	intel_enable_pipe(intel_crtc);
4709 
4710 	for_each_encoder_on_crtc(dev, crtc, encoder)
4711 		encoder->enable(encoder);
4712 
4713 	intel_crtc_enable_planes(crtc);
4714 
4715 	/*
4716 	 * Gen2 reports pipe underruns whenever all planes are disabled.
4717 	 * So don't enable underrun reporting before at least some planes
4718 	 * are enabled.
4719 	 * FIXME: Need to fix the logic to work when we turn off all planes
4720 	 * but leave the pipe running.
4721 	 */
4722 	if (IS_GEN2(dev))
4723 		intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
4724 
4725 	drm_crtc_vblank_on(crtc);
4726 
4727 	/* Underruns don't raise interrupts, so check manually. */
4728 	i9xx_check_fifo_underruns(dev);
4729 }
4730 
4731 static void i9xx_pfit_disable(struct intel_crtc *crtc)
4732 {
4733 	struct drm_device *dev = crtc->base.dev;
4734 	struct drm_i915_private *dev_priv = dev->dev_private;
4735 
4736 	if (!crtc->config.gmch_pfit.control)
4737 		return;
4738 
4739 	assert_pipe_disabled(dev_priv, crtc->pipe);
4740 
4741 	DRM_DEBUG_DRIVER("disabling pfit, current: 0x%08x\n",
4742 			 I915_READ(PFIT_CONTROL));
4743 	I915_WRITE(PFIT_CONTROL, 0);
4744 }
4745 
4746 static void i9xx_crtc_disable(struct drm_crtc *crtc)
4747 {
4748 	struct drm_device *dev = crtc->dev;
4749 	struct drm_i915_private *dev_priv = dev->dev_private;
4750 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4751 	struct intel_encoder *encoder;
4752 	int pipe = intel_crtc->pipe;
4753 
4754 	if (!intel_crtc->active)
4755 		return;
4756 
4757 	/*
4758 	 * Gen2 reports pipe underruns whenever all planes are disabled.
4759 	 * So diasble underrun reporting before all the planes get disabled.
4760 	 * FIXME: Need to fix the logic to work when we turn off all planes
4761 	 * but leave the pipe running.
4762 	 */
4763 	if (IS_GEN2(dev))
4764 		intel_set_cpu_fifo_underrun_reporting(dev, pipe, false);
4765 
4766 	intel_crtc_disable_planes(crtc);
4767 
4768 	for_each_encoder_on_crtc(dev, crtc, encoder)
4769 		encoder->disable(encoder);
4770 
4771 	/*
4772 	 * On gen2 planes are double buffered but the pipe isn't, so we must
4773 	 * wait for planes to fully turn off before disabling the pipe.
4774 	 */
4775 	if (IS_GEN2(dev))
4776 		intel_wait_for_vblank(dev, pipe);
4777 
4778 	intel_disable_pipe(dev_priv, pipe);
4779 
4780 	i9xx_pfit_disable(intel_crtc);
4781 
4782 	for_each_encoder_on_crtc(dev, crtc, encoder)
4783 		if (encoder->post_disable)
4784 			encoder->post_disable(encoder);
4785 
4786 	if (!intel_pipe_has_type(crtc, INTEL_OUTPUT_DSI)) {
4787 		if (IS_CHERRYVIEW(dev))
4788 			chv_disable_pll(dev_priv, pipe);
4789 		else if (IS_VALLEYVIEW(dev))
4790 			vlv_disable_pll(dev_priv, pipe);
4791 		else
4792 			i9xx_disable_pll(dev_priv, pipe);
4793 	}
4794 
4795 	if (!IS_GEN2(dev))
4796 		intel_set_cpu_fifo_underrun_reporting(dev, pipe, false);
4797 
4798 	intel_crtc->active = false;
4799 	intel_update_watermarks(crtc);
4800 
4801 	mutex_lock(&dev->struct_mutex);
4802 	intel_update_fbc(dev);
4803 	intel_edp_psr_update(dev);
4804 	mutex_unlock(&dev->struct_mutex);
4805 }
4806 
4807 static void i9xx_crtc_off(struct drm_crtc *crtc)
4808 {
4809 }
4810 
4811 static void intel_crtc_update_sarea(struct drm_crtc *crtc,
4812 				    bool enabled)
4813 {
4814 	struct drm_device *dev = crtc->dev;
4815 	struct drm_i915_master_private *master_priv = dev->dev_private;
4816 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4817 	int pipe = intel_crtc->pipe;
4818 
4819 #if 0
4820 	if (!dev->primary->master)
4821 		return;
4822 
4823 	master_priv = dev->primary->master->driver_priv;
4824 #endif
4825 	if (!master_priv->sarea_priv)
4826 		return;
4827 
4828 	switch (pipe) {
4829 	case 0:
4830 		master_priv->sarea_priv->pipeA_w = enabled ? crtc->mode.hdisplay : 0;
4831 		master_priv->sarea_priv->pipeA_h = enabled ? crtc->mode.vdisplay : 0;
4832 		break;
4833 	case 1:
4834 		master_priv->sarea_priv->pipeB_w = enabled ? crtc->mode.hdisplay : 0;
4835 		master_priv->sarea_priv->pipeB_h = enabled ? crtc->mode.vdisplay : 0;
4836 		break;
4837 	default:
4838 		DRM_ERROR("Can't update pipe %c in SAREA\n", pipe_name(pipe));
4839 		break;
4840 	}
4841 }
4842 
4843 /**
4844  * Sets the power management mode of the pipe and plane.
4845  */
4846 void intel_crtc_update_dpms(struct drm_crtc *crtc)
4847 {
4848 	struct drm_device *dev = crtc->dev;
4849 	struct drm_i915_private *dev_priv = dev->dev_private;
4850 	struct intel_encoder *intel_encoder;
4851 	bool enable = false;
4852 
4853 	for_each_encoder_on_crtc(dev, crtc, intel_encoder)
4854 		enable |= intel_encoder->connectors_active;
4855 
4856 	if (enable)
4857 		dev_priv->display.crtc_enable(crtc);
4858 	else
4859 		dev_priv->display.crtc_disable(crtc);
4860 
4861 	intel_crtc_update_sarea(crtc, enable);
4862 }
4863 
4864 static void intel_crtc_disable(struct drm_crtc *crtc)
4865 {
4866 	struct drm_device *dev = crtc->dev;
4867 	struct drm_connector *connector;
4868 	struct drm_i915_private *dev_priv = dev->dev_private;
4869 
4870 	/* crtc should still be enabled when we disable it. */
4871 	WARN_ON(!crtc->enabled);
4872 
4873 	dev_priv->display.crtc_disable(crtc);
4874 	intel_crtc_update_sarea(crtc, false);
4875 	dev_priv->display.off(crtc);
4876 
4877 	assert_plane_disabled(dev->dev_private, to_intel_crtc(crtc)->plane);
4878 	assert_cursor_disabled(dev_priv, to_intel_crtc(crtc)->pipe);
4879 	assert_pipe_disabled(dev->dev_private, to_intel_crtc(crtc)->pipe);
4880 
4881 	if (crtc->primary->fb) {
4882 		mutex_lock(&dev->struct_mutex);
4883 		intel_unpin_fb_obj(to_intel_framebuffer(crtc->primary->fb)->obj);
4884 		mutex_unlock(&dev->struct_mutex);
4885 		crtc->primary->fb = NULL;
4886 	}
4887 
4888 	/* Update computed state. */
4889 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
4890 		if (!connector->encoder || !connector->encoder->crtc)
4891 			continue;
4892 
4893 		if (connector->encoder->crtc != crtc)
4894 			continue;
4895 
4896 		connector->dpms = DRM_MODE_DPMS_OFF;
4897 		to_intel_encoder(connector->encoder)->connectors_active = false;
4898 	}
4899 }
4900 
4901 void intel_encoder_destroy(struct drm_encoder *encoder)
4902 {
4903 	struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
4904 
4905 	drm_encoder_cleanup(encoder);
4906 	kfree(intel_encoder);
4907 }
4908 
4909 /* Simple dpms helper for encoders with just one connector, no cloning and only
4910  * one kind of off state. It clamps all !ON modes to fully OFF and changes the
4911  * state of the entire output pipe. */
4912 static void intel_encoder_dpms(struct intel_encoder *encoder, int mode)
4913 {
4914 	if (mode == DRM_MODE_DPMS_ON) {
4915 		encoder->connectors_active = true;
4916 
4917 		intel_crtc_update_dpms(encoder->base.crtc);
4918 	} else {
4919 		encoder->connectors_active = false;
4920 
4921 		intel_crtc_update_dpms(encoder->base.crtc);
4922 	}
4923 }
4924 
4925 /* Cross check the actual hw state with our own modeset state tracking (and it's
4926  * internal consistency). */
4927 static void intel_connector_check_state(struct intel_connector *connector)
4928 {
4929 	if (connector->get_hw_state(connector)) {
4930 		struct intel_encoder *encoder = connector->encoder;
4931 		struct drm_crtc *crtc;
4932 		bool encoder_enabled;
4933 		enum i915_pipe pipe;
4934 
4935 		DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
4936 			      connector->base.base.id,
4937 			      connector->base.name);
4938 
4939 		WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
4940 		     "wrong connector dpms state\n");
4941 		WARN(connector->base.encoder != &encoder->base,
4942 		     "active connector not linked to encoder\n");
4943 		WARN(!encoder->connectors_active,
4944 		     "encoder->connectors_active not set\n");
4945 
4946 		encoder_enabled = encoder->get_hw_state(encoder, &pipe);
4947 		WARN(!encoder_enabled, "encoder not enabled\n");
4948 		if (WARN_ON(!encoder->base.crtc))
4949 			return;
4950 
4951 		crtc = encoder->base.crtc;
4952 
4953 		WARN(!crtc->enabled, "crtc not enabled\n");
4954 		WARN(!to_intel_crtc(crtc)->active, "crtc not active\n");
4955 		WARN(pipe != to_intel_crtc(crtc)->pipe,
4956 		     "encoder active on the wrong pipe\n");
4957 	}
4958 }
4959 
4960 /* Even simpler default implementation, if there's really no special case to
4961  * consider. */
4962 void intel_connector_dpms(struct drm_connector *connector, int mode)
4963 {
4964 	/* All the simple cases only support two dpms states. */
4965 	if (mode != DRM_MODE_DPMS_ON)
4966 		mode = DRM_MODE_DPMS_OFF;
4967 
4968 	if (mode == connector->dpms)
4969 		return;
4970 
4971 	connector->dpms = mode;
4972 
4973 	/* Only need to change hw state when actually enabled */
4974 	if (connector->encoder)
4975 		intel_encoder_dpms(to_intel_encoder(connector->encoder), mode);
4976 
4977 	intel_modeset_check_state(connector->dev);
4978 }
4979 
4980 /* Simple connector->get_hw_state implementation for encoders that support only
4981  * one connector and no cloning and hence the encoder state determines the state
4982  * of the connector. */
4983 bool intel_connector_get_hw_state(struct intel_connector *connector)
4984 {
4985 	enum i915_pipe pipe = 0;
4986 	struct intel_encoder *encoder = connector->encoder;
4987 
4988 	return encoder->get_hw_state(encoder, &pipe);
4989 }
4990 
4991 static bool ironlake_check_fdi_lanes(struct drm_device *dev, enum i915_pipe pipe,
4992 				     struct intel_crtc_config *pipe_config)
4993 {
4994 	struct drm_i915_private *dev_priv = dev->dev_private;
4995 	struct intel_crtc *pipe_B_crtc =
4996 		to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_B]);
4997 
4998 	DRM_DEBUG_KMS("checking fdi config on pipe %c, lanes %i\n",
4999 		      pipe_name(pipe), pipe_config->fdi_lanes);
5000 	if (pipe_config->fdi_lanes > 4) {
5001 		DRM_DEBUG_KMS("invalid fdi lane config on pipe %c: %i lanes\n",
5002 			      pipe_name(pipe), pipe_config->fdi_lanes);
5003 		return false;
5004 	}
5005 
5006 	if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
5007 		if (pipe_config->fdi_lanes > 2) {
5008 			DRM_DEBUG_KMS("only 2 lanes on haswell, required: %i lanes\n",
5009 				      pipe_config->fdi_lanes);
5010 			return false;
5011 		} else {
5012 			return true;
5013 		}
5014 	}
5015 
5016 	if (INTEL_INFO(dev)->num_pipes == 2)
5017 		return true;
5018 
5019 	/* Ivybridge 3 pipe is really complicated */
5020 	switch (pipe) {
5021 	case PIPE_A:
5022 		return true;
5023 	case PIPE_B:
5024 		if (dev_priv->pipe_to_crtc_mapping[PIPE_C]->enabled &&
5025 		    pipe_config->fdi_lanes > 2) {
5026 			DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %c: %i lanes\n",
5027 				      pipe_name(pipe), pipe_config->fdi_lanes);
5028 			return false;
5029 		}
5030 		return true;
5031 	case PIPE_C:
5032 		if (!pipe_has_enabled_pch(pipe_B_crtc) ||
5033 		    pipe_B_crtc->config.fdi_lanes <= 2) {
5034 			if (pipe_config->fdi_lanes > 2) {
5035 				DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %c: %i lanes\n",
5036 					      pipe_name(pipe), pipe_config->fdi_lanes);
5037 				return false;
5038 			}
5039 		} else {
5040 			DRM_DEBUG_KMS("fdi link B uses too many lanes to enable link C\n");
5041 			return false;
5042 		}
5043 		return true;
5044 	default:
5045 		BUG();
5046 	}
5047 }
5048 
5049 #define RETRY 1
5050 static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
5051 				       struct intel_crtc_config *pipe_config)
5052 {
5053 	struct drm_device *dev = intel_crtc->base.dev;
5054 	struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode;
5055 	int lane, link_bw, fdi_dotclock;
5056 	bool setup_ok, needs_recompute = false;
5057 
5058 retry:
5059 	/* FDI is a binary signal running at ~2.7GHz, encoding
5060 	 * each output octet as 10 bits. The actual frequency
5061 	 * is stored as a divider into a 100MHz clock, and the
5062 	 * mode pixel clock is stored in units of 1KHz.
5063 	 * Hence the bw of each lane in terms of the mode signal
5064 	 * is:
5065 	 */
5066 	link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10;
5067 
5068 	fdi_dotclock = adjusted_mode->crtc_clock;
5069 
5070 	lane = ironlake_get_lanes_required(fdi_dotclock, link_bw,
5071 					   pipe_config->pipe_bpp);
5072 
5073 	pipe_config->fdi_lanes = lane;
5074 
5075 	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
5076 			       link_bw, &pipe_config->fdi_m_n);
5077 
5078 	setup_ok = ironlake_check_fdi_lanes(intel_crtc->base.dev,
5079 					    intel_crtc->pipe, pipe_config);
5080 	if (!setup_ok && pipe_config->pipe_bpp > 6*3) {
5081 		pipe_config->pipe_bpp -= 2*3;
5082 		DRM_DEBUG_KMS("fdi link bw constraint, reducing pipe bpp to %i\n",
5083 			      pipe_config->pipe_bpp);
5084 		needs_recompute = true;
5085 		pipe_config->bw_constrained = true;
5086 
5087 		goto retry;
5088 	}
5089 
5090 	if (needs_recompute)
5091 		return RETRY;
5092 
5093 	return setup_ok ? 0 : -EINVAL;
5094 }
5095 
5096 static void hsw_compute_ips_config(struct intel_crtc *crtc,
5097 				   struct intel_crtc_config *pipe_config)
5098 {
5099 	pipe_config->ips_enabled = i915.enable_ips &&
5100 				   hsw_crtc_supports_ips(crtc) &&
5101 				   pipe_config->pipe_bpp <= 24;
5102 }
5103 
5104 static int intel_crtc_compute_config(struct intel_crtc *crtc,
5105 				     struct intel_crtc_config *pipe_config)
5106 {
5107 	struct drm_device *dev = crtc->base.dev;
5108 	struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode;
5109 
5110 	/* FIXME should check pixel clock limits on all platforms */
5111 	if (INTEL_INFO(dev)->gen < 4) {
5112 		struct drm_i915_private *dev_priv = dev->dev_private;
5113 		int clock_limit =
5114 			dev_priv->display.get_display_clock_speed(dev);
5115 
5116 		/*
5117 		 * Enable pixel doubling when the dot clock
5118 		 * is > 90% of the (display) core speed.
5119 		 *
5120 		 * GDG double wide on either pipe,
5121 		 * otherwise pipe A only.
5122 		 */
5123 		if ((crtc->pipe == PIPE_A || IS_I915G(dev)) &&
5124 		    adjusted_mode->crtc_clock > clock_limit * 9 / 10) {
5125 			clock_limit *= 2;
5126 			pipe_config->double_wide = true;
5127 		}
5128 
5129 		if (adjusted_mode->crtc_clock > clock_limit * 9 / 10)
5130 			return -EINVAL;
5131 	}
5132 
5133 	/*
5134 	 * Pipe horizontal size must be even in:
5135 	 * - DVO ganged mode
5136 	 * - LVDS dual channel mode
5137 	 * - Double wide pipe
5138 	 */
5139 	if ((intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
5140 	     intel_is_dual_link_lvds(dev)) || pipe_config->double_wide)
5141 		pipe_config->pipe_src_w &= ~1;
5142 
5143 	/* Cantiga+ cannot handle modes with a hsync front porch of 0.
5144 	 * WaPruneModeWithIncorrectHsyncOffset:ctg,elk,ilk,snb,ivb,vlv,hsw.
5145 	 */
5146 	if ((INTEL_INFO(dev)->gen > 4 || IS_G4X(dev)) &&
5147 		adjusted_mode->hsync_start == adjusted_mode->hdisplay)
5148 		return -EINVAL;
5149 
5150 	if ((IS_G4X(dev) || IS_VALLEYVIEW(dev)) && pipe_config->pipe_bpp > 10*3) {
5151 		pipe_config->pipe_bpp = 10*3; /* 12bpc is gen5+ */
5152 	} else if (INTEL_INFO(dev)->gen <= 4 && pipe_config->pipe_bpp > 8*3) {
5153 		/* only a 8bpc pipe, with 6bpc dither through the panel fitter
5154 		 * for lvds. */
5155 		pipe_config->pipe_bpp = 8*3;
5156 	}
5157 
5158 	if (HAS_IPS(dev))
5159 		hsw_compute_ips_config(crtc, pipe_config);
5160 
5161 	/* XXX: PCH clock sharing is done in ->mode_set, so make sure the old
5162 	 * clock survives for now. */
5163 	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
5164 		pipe_config->shared_dpll = crtc->config.shared_dpll;
5165 
5166 	if (pipe_config->has_pch_encoder)
5167 		return ironlake_fdi_compute_config(crtc, pipe_config);
5168 
5169 	return 0;
5170 }
5171 
5172 static int valleyview_get_display_clock_speed(struct drm_device *dev)
5173 {
5174 	return 400000; /* FIXME */
5175 }
5176 
5177 static int i945_get_display_clock_speed(struct drm_device *dev)
5178 {
5179 	return 400000;
5180 }
5181 
5182 static int i915_get_display_clock_speed(struct drm_device *dev)
5183 {
5184 	return 333000;
5185 }
5186 
5187 static int i9xx_misc_get_display_clock_speed(struct drm_device *dev)
5188 {
5189 	return 200000;
5190 }
5191 
5192 static int pnv_get_display_clock_speed(struct drm_device *dev)
5193 {
5194 	u16 gcfgc = 0;
5195 
5196 	pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
5197 
5198 	switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
5199 	case GC_DISPLAY_CLOCK_267_MHZ_PNV:
5200 		return 267000;
5201 	case GC_DISPLAY_CLOCK_333_MHZ_PNV:
5202 		return 333000;
5203 	case GC_DISPLAY_CLOCK_444_MHZ_PNV:
5204 		return 444000;
5205 	case GC_DISPLAY_CLOCK_200_MHZ_PNV:
5206 		return 200000;
5207 	default:
5208 		DRM_ERROR("Unknown pnv display core clock 0x%04x\n", gcfgc);
5209 	case GC_DISPLAY_CLOCK_133_MHZ_PNV:
5210 		return 133000;
5211 	case GC_DISPLAY_CLOCK_167_MHZ_PNV:
5212 		return 167000;
5213 	}
5214 }
5215 
5216 static int i915gm_get_display_clock_speed(struct drm_device *dev)
5217 {
5218 	u16 gcfgc = 0;
5219 
5220 	pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
5221 
5222 	if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
5223 		return 133000;
5224 	else {
5225 		switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
5226 		case GC_DISPLAY_CLOCK_333_MHZ:
5227 			return 333000;
5228 		default:
5229 		case GC_DISPLAY_CLOCK_190_200_MHZ:
5230 			return 190000;
5231 		}
5232 	}
5233 }
5234 
5235 static int i865_get_display_clock_speed(struct drm_device *dev)
5236 {
5237 	return 266000;
5238 }
5239 
5240 static int i855_get_display_clock_speed(struct drm_device *dev)
5241 {
5242 	u16 hpllcc = 0;
5243 	/* Assume that the hardware is in the high speed state.  This
5244 	 * should be the default.
5245 	 */
5246 	switch (hpllcc & GC_CLOCK_CONTROL_MASK) {
5247 	case GC_CLOCK_133_200:
5248 	case GC_CLOCK_100_200:
5249 		return 200000;
5250 	case GC_CLOCK_166_250:
5251 		return 250000;
5252 	case GC_CLOCK_100_133:
5253 		return 133000;
5254 	}
5255 
5256 	/* Shouldn't happen */
5257 	return 0;
5258 }
5259 
5260 static int i830_get_display_clock_speed(struct drm_device *dev)
5261 {
5262 	return 133000;
5263 }
5264 
5265 static void
5266 intel_reduce_m_n_ratio(uint32_t *num, uint32_t *den)
5267 {
5268 	while (*num > DATA_LINK_M_N_MASK ||
5269 	       *den > DATA_LINK_M_N_MASK) {
5270 		*num >>= 1;
5271 		*den >>= 1;
5272 	}
5273 }
5274 
5275 static void compute_m_n(unsigned int m, unsigned int n,
5276 			uint32_t *ret_m, uint32_t *ret_n)
5277 {
5278 	*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
5279 	*ret_m = div_u64((uint64_t) m * *ret_n, n);
5280 	intel_reduce_m_n_ratio(ret_m, ret_n);
5281 }
5282 
5283 void
5284 intel_link_compute_m_n(int bits_per_pixel, int nlanes,
5285 		       int pixel_clock, int link_clock,
5286 		       struct intel_link_m_n *m_n)
5287 {
5288 	m_n->tu = 64;
5289 
5290 	compute_m_n(bits_per_pixel * pixel_clock,
5291 		    link_clock * nlanes * 8,
5292 		    &m_n->gmch_m, &m_n->gmch_n);
5293 
5294 	compute_m_n(pixel_clock, link_clock,
5295 		    &m_n->link_m, &m_n->link_n);
5296 }
5297 
5298 static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
5299 {
5300 	if (i915.panel_use_ssc >= 0)
5301 		return i915.panel_use_ssc != 0;
5302 	return dev_priv->vbt.lvds_use_ssc
5303 		&& !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
5304 }
5305 
5306 static int i9xx_get_refclk(struct drm_crtc *crtc, int num_connectors)
5307 {
5308 	struct drm_device *dev = crtc->dev;
5309 	struct drm_i915_private *dev_priv = dev->dev_private;
5310 	int refclk;
5311 
5312 	if (IS_VALLEYVIEW(dev)) {
5313 		refclk = 100000;
5314 	} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
5315 	    intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
5316 		refclk = dev_priv->vbt.lvds_ssc_freq;
5317 		DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", refclk);
5318 	} else if (!IS_GEN2(dev)) {
5319 		refclk = 96000;
5320 	} else {
5321 		refclk = 48000;
5322 	}
5323 
5324 	return refclk;
5325 }
5326 
5327 static uint32_t pnv_dpll_compute_fp(struct dpll *dpll)
5328 {
5329 	return (1 << dpll->n) << 16 | dpll->m2;
5330 }
5331 
5332 static uint32_t i9xx_dpll_compute_fp(struct dpll *dpll)
5333 {
5334 	return dpll->n << 16 | dpll->m1 << 8 | dpll->m2;
5335 }
5336 
5337 static void i9xx_update_pll_dividers(struct intel_crtc *crtc,
5338 				     intel_clock_t *reduced_clock)
5339 {
5340 	struct drm_device *dev = crtc->base.dev;
5341 	u32 fp, fp2 = 0;
5342 
5343 	if (IS_PINEVIEW(dev)) {
5344 		fp = pnv_dpll_compute_fp(&crtc->config.dpll);
5345 		if (reduced_clock)
5346 			fp2 = pnv_dpll_compute_fp(reduced_clock);
5347 	} else {
5348 		fp = i9xx_dpll_compute_fp(&crtc->config.dpll);
5349 		if (reduced_clock)
5350 			fp2 = i9xx_dpll_compute_fp(reduced_clock);
5351 	}
5352 
5353 	crtc->config.dpll_hw_state.fp0 = fp;
5354 
5355 	crtc->lowfreq_avail = false;
5356 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
5357 	    reduced_clock && i915.powersave) {
5358 		crtc->config.dpll_hw_state.fp1 = fp2;
5359 		crtc->lowfreq_avail = true;
5360 	} else {
5361 		crtc->config.dpll_hw_state.fp1 = fp;
5362 	}
5363 }
5364 
5365 static void vlv_pllb_recal_opamp(struct drm_i915_private *dev_priv, enum i915_pipe
5366 		pipe)
5367 {
5368 	u32 reg_val;
5369 
5370 	/*
5371 	 * PLLB opamp always calibrates to max value of 0x3f, force enable it
5372 	 * and set it to a reasonable value instead.
5373 	 */
5374 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1));
5375 	reg_val &= 0xffffff00;
5376 	reg_val |= 0x00000030;
5377 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val);
5378 
5379 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13);
5380 	reg_val &= 0x8cffffff;
5381 	reg_val = 0x8c000000;
5382 	vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val);
5383 
5384 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1));
5385 	reg_val &= 0xffffff00;
5386 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val);
5387 
5388 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13);
5389 	reg_val &= 0x00ffffff;
5390 	reg_val |= 0xb0000000;
5391 	vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val);
5392 }
5393 
5394 static void intel_pch_transcoder_set_m_n(struct intel_crtc *crtc,
5395 					 struct intel_link_m_n *m_n)
5396 {
5397 	struct drm_device *dev = crtc->base.dev;
5398 	struct drm_i915_private *dev_priv = dev->dev_private;
5399 	int pipe = crtc->pipe;
5400 
5401 	I915_WRITE(PCH_TRANS_DATA_M1(pipe), TU_SIZE(m_n->tu) | m_n->gmch_m);
5402 	I915_WRITE(PCH_TRANS_DATA_N1(pipe), m_n->gmch_n);
5403 	I915_WRITE(PCH_TRANS_LINK_M1(pipe), m_n->link_m);
5404 	I915_WRITE(PCH_TRANS_LINK_N1(pipe), m_n->link_n);
5405 }
5406 
5407 static void intel_cpu_transcoder_set_m_n(struct intel_crtc *crtc,
5408 					 struct intel_link_m_n *m_n)
5409 {
5410 	struct drm_device *dev = crtc->base.dev;
5411 	struct drm_i915_private *dev_priv = dev->dev_private;
5412 	int pipe = crtc->pipe;
5413 	enum transcoder transcoder = crtc->config.cpu_transcoder;
5414 
5415 	if (INTEL_INFO(dev)->gen >= 5) {
5416 		I915_WRITE(PIPE_DATA_M1(transcoder), TU_SIZE(m_n->tu) | m_n->gmch_m);
5417 		I915_WRITE(PIPE_DATA_N1(transcoder), m_n->gmch_n);
5418 		I915_WRITE(PIPE_LINK_M1(transcoder), m_n->link_m);
5419 		I915_WRITE(PIPE_LINK_N1(transcoder), m_n->link_n);
5420 	} else {
5421 		I915_WRITE(PIPE_DATA_M_G4X(pipe), TU_SIZE(m_n->tu) | m_n->gmch_m);
5422 		I915_WRITE(PIPE_DATA_N_G4X(pipe), m_n->gmch_n);
5423 		I915_WRITE(PIPE_LINK_M_G4X(pipe), m_n->link_m);
5424 		I915_WRITE(PIPE_LINK_N_G4X(pipe), m_n->link_n);
5425 	}
5426 }
5427 
5428 static void intel_dp_set_m_n(struct intel_crtc *crtc)
5429 {
5430 	if (crtc->config.has_pch_encoder)
5431 		intel_pch_transcoder_set_m_n(crtc, &crtc->config.dp_m_n);
5432 	else
5433 		intel_cpu_transcoder_set_m_n(crtc, &crtc->config.dp_m_n);
5434 }
5435 
5436 static void vlv_update_pll(struct intel_crtc *crtc)
5437 {
5438 	u32 dpll, dpll_md;
5439 
5440 	/*
5441 	 * Enable DPIO clock input. We should never disable the reference
5442 	 * clock for pipe B, since VGA hotplug / manual detection depends
5443 	 * on it.
5444 	 */
5445 	dpll = DPLL_EXT_BUFFER_ENABLE_VLV | DPLL_REFA_CLK_ENABLE_VLV |
5446 		DPLL_VGA_MODE_DIS | DPLL_INTEGRATED_CLOCK_VLV;
5447 	/* We should never disable this, set it here for state tracking */
5448 	if (crtc->pipe == PIPE_B)
5449 		dpll |= DPLL_INTEGRATED_CRI_CLK_VLV;
5450 	dpll |= DPLL_VCO_ENABLE;
5451 	crtc->config.dpll_hw_state.dpll = dpll;
5452 
5453 	dpll_md = (crtc->config.pixel_multiplier - 1)
5454 		<< DPLL_MD_UDI_MULTIPLIER_SHIFT;
5455 	crtc->config.dpll_hw_state.dpll_md = dpll_md;
5456 }
5457 
5458 static void vlv_prepare_pll(struct intel_crtc *crtc)
5459 {
5460 	struct drm_device *dev = crtc->base.dev;
5461 	struct drm_i915_private *dev_priv = dev->dev_private;
5462 	int pipe = crtc->pipe;
5463 	u32 mdiv;
5464 	u32 bestn, bestm1, bestm2, bestp1, bestp2;
5465 	u32 coreclk, reg_val;
5466 
5467 	mutex_lock(&dev_priv->dpio_lock);
5468 
5469 	bestn = crtc->config.dpll.n;
5470 	bestm1 = crtc->config.dpll.m1;
5471 	bestm2 = crtc->config.dpll.m2;
5472 	bestp1 = crtc->config.dpll.p1;
5473 	bestp2 = crtc->config.dpll.p2;
5474 
5475 	/* See eDP HDMI DPIO driver vbios notes doc */
5476 
5477 	/* PLL B needs special handling */
5478 	if (pipe == PIPE_B)
5479 		vlv_pllb_recal_opamp(dev_priv, pipe);
5480 
5481 	/* Set up Tx target for periodic Rcomp update */
5482 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9_BCAST, 0x0100000f);
5483 
5484 	/* Disable target IRef on PLL */
5485 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW8(pipe));
5486 	reg_val &= 0x00ffffff;
5487 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW8(pipe), reg_val);
5488 
5489 	/* Disable fast lock */
5490 	vlv_dpio_write(dev_priv, pipe, VLV_CMN_DW0, 0x610);
5491 
5492 	/* Set idtafcrecal before PLL is enabled */
5493 	mdiv = ((bestm1 << DPIO_M1DIV_SHIFT) | (bestm2 & DPIO_M2DIV_MASK));
5494 	mdiv |= ((bestp1 << DPIO_P1_SHIFT) | (bestp2 << DPIO_P2_SHIFT));
5495 	mdiv |= ((bestn << DPIO_N_SHIFT));
5496 	mdiv |= (1 << DPIO_K_SHIFT);
5497 
5498 	/*
5499 	 * Post divider depends on pixel clock rate, DAC vs digital (and LVDS,
5500 	 * but we don't support that).
5501 	 * Note: don't use the DAC post divider as it seems unstable.
5502 	 */
5503 	mdiv |= (DPIO_POST_DIV_HDMIDP << DPIO_POST_DIV_SHIFT);
5504 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv);
5505 
5506 	mdiv |= DPIO_ENABLE_CALIBRATION;
5507 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv);
5508 
5509 	/* Set HBR and RBR LPF coefficients */
5510 	if (crtc->config.port_clock == 162000 ||
5511 	    intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_ANALOG) ||
5512 	    intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_HDMI))
5513 		vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe),
5514 				 0x009f0003);
5515 	else
5516 		vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe),
5517 				 0x00d0000f);
5518 
5519 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_EDP) ||
5520 	    intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_DISPLAYPORT)) {
5521 		/* Use SSC source */
5522 		if (pipe == PIPE_A)
5523 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
5524 					 0x0df40000);
5525 		else
5526 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
5527 					 0x0df70000);
5528 	} else { /* HDMI or VGA */
5529 		/* Use bend source */
5530 		if (pipe == PIPE_A)
5531 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
5532 					 0x0df70000);
5533 		else
5534 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
5535 					 0x0df40000);
5536 	}
5537 
5538 	coreclk = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW7(pipe));
5539 	coreclk = (coreclk & 0x0000ff00) | 0x01c00000;
5540 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_DISPLAYPORT) ||
5541 	    intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_EDP))
5542 		coreclk |= 0x01000000;
5543 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW7(pipe), coreclk);
5544 
5545 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW11(pipe), 0x87871000);
5546 	mutex_unlock(&dev_priv->dpio_lock);
5547 }
5548 
5549 static void chv_update_pll(struct intel_crtc *crtc)
5550 {
5551 	struct drm_device *dev = crtc->base.dev;
5552 	struct drm_i915_private *dev_priv = dev->dev_private;
5553 	int pipe = crtc->pipe;
5554 	int dpll_reg = DPLL(crtc->pipe);
5555 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
5556 	u32 loopfilter, intcoeff;
5557 	u32 bestn, bestm1, bestm2, bestp1, bestp2, bestm2_frac;
5558 	int refclk;
5559 
5560 	crtc->config.dpll_hw_state.dpll = DPLL_SSC_REF_CLOCK_CHV |
5561 		DPLL_REFA_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS |
5562 		DPLL_VCO_ENABLE;
5563 	if (pipe != PIPE_A)
5564 		crtc->config.dpll_hw_state.dpll |= DPLL_INTEGRATED_CRI_CLK_VLV;
5565 
5566 	crtc->config.dpll_hw_state.dpll_md =
5567 		(crtc->config.pixel_multiplier - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
5568 
5569 	bestn = crtc->config.dpll.n;
5570 	bestm2_frac = crtc->config.dpll.m2 & 0x3fffff;
5571 	bestm1 = crtc->config.dpll.m1;
5572 	bestm2 = crtc->config.dpll.m2 >> 22;
5573 	bestp1 = crtc->config.dpll.p1;
5574 	bestp2 = crtc->config.dpll.p2;
5575 
5576 	/*
5577 	 * Enable Refclk and SSC
5578 	 */
5579 	I915_WRITE(dpll_reg,
5580 		   crtc->config.dpll_hw_state.dpll & ~DPLL_VCO_ENABLE);
5581 
5582 	mutex_lock(&dev_priv->dpio_lock);
5583 
5584 	/* p1 and p2 divider */
5585 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW13(port),
5586 			5 << DPIO_CHV_S1_DIV_SHIFT |
5587 			bestp1 << DPIO_CHV_P1_DIV_SHIFT |
5588 			bestp2 << DPIO_CHV_P2_DIV_SHIFT |
5589 			1 << DPIO_CHV_K_DIV_SHIFT);
5590 
5591 	/* Feedback post-divider - m2 */
5592 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW0(port), bestm2);
5593 
5594 	/* Feedback refclk divider - n and m1 */
5595 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW1(port),
5596 			DPIO_CHV_M1_DIV_BY_2 |
5597 			1 << DPIO_CHV_N_DIV_SHIFT);
5598 
5599 	/* M2 fraction division */
5600 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW2(port), bestm2_frac);
5601 
5602 	/* M2 fraction division enable */
5603 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW3(port),
5604 		       DPIO_CHV_FRAC_DIV_EN |
5605 		       (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT));
5606 
5607 	/* Loop filter */
5608 	refclk = i9xx_get_refclk(&crtc->base, 0);
5609 	loopfilter = 5 << DPIO_CHV_PROP_COEFF_SHIFT |
5610 		2 << DPIO_CHV_GAIN_CTRL_SHIFT;
5611 	if (refclk == 100000)
5612 		intcoeff = 11;
5613 	else if (refclk == 38400)
5614 		intcoeff = 10;
5615 	else
5616 		intcoeff = 9;
5617 	loopfilter |= intcoeff << DPIO_CHV_INT_COEFF_SHIFT;
5618 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW6(port), loopfilter);
5619 
5620 	/* AFC Recal */
5621 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port),
5622 			vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port)) |
5623 			DPIO_AFC_RECAL);
5624 
5625 	mutex_unlock(&dev_priv->dpio_lock);
5626 }
5627 
5628 static void i9xx_update_pll(struct intel_crtc *crtc,
5629 			    intel_clock_t *reduced_clock,
5630 			    int num_connectors)
5631 {
5632 	struct drm_device *dev = crtc->base.dev;
5633 	struct drm_i915_private *dev_priv = dev->dev_private;
5634 	u32 dpll;
5635 	bool is_sdvo;
5636 	struct dpll *clock = &crtc->config.dpll;
5637 
5638 	i9xx_update_pll_dividers(crtc, reduced_clock);
5639 
5640 	is_sdvo = intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_SDVO) ||
5641 		intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_HDMI);
5642 
5643 	dpll = DPLL_VGA_MODE_DIS;
5644 
5645 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS))
5646 		dpll |= DPLLB_MODE_LVDS;
5647 	else
5648 		dpll |= DPLLB_MODE_DAC_SERIAL;
5649 
5650 	if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) {
5651 		dpll |= (crtc->config.pixel_multiplier - 1)
5652 			<< SDVO_MULTIPLIER_SHIFT_HIRES;
5653 	}
5654 
5655 	if (is_sdvo)
5656 		dpll |= DPLL_SDVO_HIGH_SPEED;
5657 
5658 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_DISPLAYPORT))
5659 		dpll |= DPLL_SDVO_HIGH_SPEED;
5660 
5661 	/* compute bitmask from p1 value */
5662 	if (IS_PINEVIEW(dev))
5663 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW;
5664 	else {
5665 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
5666 		if (IS_G4X(dev) && reduced_clock)
5667 			dpll |= (1 << (reduced_clock->p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
5668 	}
5669 	switch (clock->p2) {
5670 	case 5:
5671 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
5672 		break;
5673 	case 7:
5674 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
5675 		break;
5676 	case 10:
5677 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
5678 		break;
5679 	case 14:
5680 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
5681 		break;
5682 	}
5683 	if (INTEL_INFO(dev)->gen >= 4)
5684 		dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
5685 
5686 	if (crtc->config.sdvo_tv_clock)
5687 		dpll |= PLL_REF_INPUT_TVCLKINBC;
5688 	else if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
5689 		 intel_panel_use_ssc(dev_priv) && num_connectors < 2)
5690 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
5691 	else
5692 		dpll |= PLL_REF_INPUT_DREFCLK;
5693 
5694 	dpll |= DPLL_VCO_ENABLE;
5695 	crtc->config.dpll_hw_state.dpll = dpll;
5696 
5697 	if (INTEL_INFO(dev)->gen >= 4) {
5698 		u32 dpll_md = (crtc->config.pixel_multiplier - 1)
5699 			<< DPLL_MD_UDI_MULTIPLIER_SHIFT;
5700 		crtc->config.dpll_hw_state.dpll_md = dpll_md;
5701 	}
5702 }
5703 
5704 static void i8xx_update_pll(struct intel_crtc *crtc,
5705 			    intel_clock_t *reduced_clock,
5706 			    int num_connectors)
5707 {
5708 	struct drm_device *dev = crtc->base.dev;
5709 	struct drm_i915_private *dev_priv = dev->dev_private;
5710 	u32 dpll;
5711 	struct dpll *clock = &crtc->config.dpll;
5712 
5713 	i9xx_update_pll_dividers(crtc, reduced_clock);
5714 
5715 	dpll = DPLL_VGA_MODE_DIS;
5716 
5717 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS)) {
5718 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
5719 	} else {
5720 		if (clock->p1 == 2)
5721 			dpll |= PLL_P1_DIVIDE_BY_TWO;
5722 		else
5723 			dpll |= (clock->p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT;
5724 		if (clock->p2 == 4)
5725 			dpll |= PLL_P2_DIVIDE_BY_4;
5726 	}
5727 
5728 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_DVO))
5729 		dpll |= DPLL_DVO_2X_MODE;
5730 
5731 	if (intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_LVDS) &&
5732 		 intel_panel_use_ssc(dev_priv) && num_connectors < 2)
5733 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
5734 	else
5735 		dpll |= PLL_REF_INPUT_DREFCLK;
5736 
5737 	dpll |= DPLL_VCO_ENABLE;
5738 	crtc->config.dpll_hw_state.dpll = dpll;
5739 }
5740 
5741 static void intel_set_pipe_timings(struct intel_crtc *intel_crtc)
5742 {
5743 	struct drm_device *dev = intel_crtc->base.dev;
5744 	struct drm_i915_private *dev_priv = dev->dev_private;
5745 	enum i915_pipe pipe = intel_crtc->pipe;
5746 	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
5747 	struct drm_display_mode *adjusted_mode =
5748 		&intel_crtc->config.adjusted_mode;
5749 	uint32_t crtc_vtotal, crtc_vblank_end;
5750 	int vsyncshift = 0;
5751 
5752 	/* We need to be careful not to changed the adjusted mode, for otherwise
5753 	 * the hw state checker will get angry at the mismatch. */
5754 	crtc_vtotal = adjusted_mode->crtc_vtotal;
5755 	crtc_vblank_end = adjusted_mode->crtc_vblank_end;
5756 
5757 	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
5758 		/* the chip adds 2 halflines automatically */
5759 		crtc_vtotal -= 1;
5760 		crtc_vblank_end -= 1;
5761 
5762 		if (intel_pipe_has_type(&intel_crtc->base, INTEL_OUTPUT_SDVO))
5763 			vsyncshift = (adjusted_mode->crtc_htotal - 1) / 2;
5764 		else
5765 			vsyncshift = adjusted_mode->crtc_hsync_start -
5766 				adjusted_mode->crtc_htotal / 2;
5767 		if (vsyncshift < 0)
5768 			vsyncshift += adjusted_mode->crtc_htotal;
5769 	}
5770 
5771 	if (INTEL_INFO(dev)->gen > 3)
5772 		I915_WRITE(VSYNCSHIFT(cpu_transcoder), vsyncshift);
5773 
5774 	I915_WRITE(HTOTAL(cpu_transcoder),
5775 		   (adjusted_mode->crtc_hdisplay - 1) |
5776 		   ((adjusted_mode->crtc_htotal - 1) << 16));
5777 	I915_WRITE(HBLANK(cpu_transcoder),
5778 		   (adjusted_mode->crtc_hblank_start - 1) |
5779 		   ((adjusted_mode->crtc_hblank_end - 1) << 16));
5780 	I915_WRITE(HSYNC(cpu_transcoder),
5781 		   (adjusted_mode->crtc_hsync_start - 1) |
5782 		   ((adjusted_mode->crtc_hsync_end - 1) << 16));
5783 
5784 	I915_WRITE(VTOTAL(cpu_transcoder),
5785 		   (adjusted_mode->crtc_vdisplay - 1) |
5786 		   ((crtc_vtotal - 1) << 16));
5787 	I915_WRITE(VBLANK(cpu_transcoder),
5788 		   (adjusted_mode->crtc_vblank_start - 1) |
5789 		   ((crtc_vblank_end - 1) << 16));
5790 	I915_WRITE(VSYNC(cpu_transcoder),
5791 		   (adjusted_mode->crtc_vsync_start - 1) |
5792 		   ((adjusted_mode->crtc_vsync_end - 1) << 16));
5793 
5794 	/* Workaround: when the EDP input selection is B, the VTOTAL_B must be
5795 	 * programmed with the VTOTAL_EDP value. Same for VTOTAL_C. This is
5796 	 * documented on the DDI_FUNC_CTL register description, EDP Input Select
5797 	 * bits. */
5798 	if (IS_HASWELL(dev) && cpu_transcoder == TRANSCODER_EDP &&
5799 	    (pipe == PIPE_B || pipe == PIPE_C))
5800 		I915_WRITE(VTOTAL(pipe), I915_READ(VTOTAL(cpu_transcoder)));
5801 
5802 	/* pipesrc controls the size that is scaled from, which should
5803 	 * always be the user's requested size.
5804 	 */
5805 	I915_WRITE(PIPESRC(pipe),
5806 		   ((intel_crtc->config.pipe_src_w - 1) << 16) |
5807 		   (intel_crtc->config.pipe_src_h - 1));
5808 }
5809 
5810 static void intel_get_pipe_timings(struct intel_crtc *crtc,
5811 				   struct intel_crtc_config *pipe_config)
5812 {
5813 	struct drm_device *dev = crtc->base.dev;
5814 	struct drm_i915_private *dev_priv = dev->dev_private;
5815 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
5816 	uint32_t tmp;
5817 
5818 	tmp = I915_READ(HTOTAL(cpu_transcoder));
5819 	pipe_config->adjusted_mode.crtc_hdisplay = (tmp & 0xffff) + 1;
5820 	pipe_config->adjusted_mode.crtc_htotal = ((tmp >> 16) & 0xffff) + 1;
5821 	tmp = I915_READ(HBLANK(cpu_transcoder));
5822 	pipe_config->adjusted_mode.crtc_hblank_start = (tmp & 0xffff) + 1;
5823 	pipe_config->adjusted_mode.crtc_hblank_end = ((tmp >> 16) & 0xffff) + 1;
5824 	tmp = I915_READ(HSYNC(cpu_transcoder));
5825 	pipe_config->adjusted_mode.crtc_hsync_start = (tmp & 0xffff) + 1;
5826 	pipe_config->adjusted_mode.crtc_hsync_end = ((tmp >> 16) & 0xffff) + 1;
5827 
5828 	tmp = I915_READ(VTOTAL(cpu_transcoder));
5829 	pipe_config->adjusted_mode.crtc_vdisplay = (tmp & 0xffff) + 1;
5830 	pipe_config->adjusted_mode.crtc_vtotal = ((tmp >> 16) & 0xffff) + 1;
5831 	tmp = I915_READ(VBLANK(cpu_transcoder));
5832 	pipe_config->adjusted_mode.crtc_vblank_start = (tmp & 0xffff) + 1;
5833 	pipe_config->adjusted_mode.crtc_vblank_end = ((tmp >> 16) & 0xffff) + 1;
5834 	tmp = I915_READ(VSYNC(cpu_transcoder));
5835 	pipe_config->adjusted_mode.crtc_vsync_start = (tmp & 0xffff) + 1;
5836 	pipe_config->adjusted_mode.crtc_vsync_end = ((tmp >> 16) & 0xffff) + 1;
5837 
5838 	if (I915_READ(PIPECONF(cpu_transcoder)) & PIPECONF_INTERLACE_MASK) {
5839 		pipe_config->adjusted_mode.flags |= DRM_MODE_FLAG_INTERLACE;
5840 		pipe_config->adjusted_mode.crtc_vtotal += 1;
5841 		pipe_config->adjusted_mode.crtc_vblank_end += 1;
5842 	}
5843 
5844 	tmp = I915_READ(PIPESRC(crtc->pipe));
5845 	pipe_config->pipe_src_h = (tmp & 0xffff) + 1;
5846 	pipe_config->pipe_src_w = ((tmp >> 16) & 0xffff) + 1;
5847 
5848 	pipe_config->requested_mode.vdisplay = pipe_config->pipe_src_h;
5849 	pipe_config->requested_mode.hdisplay = pipe_config->pipe_src_w;
5850 }
5851 
5852 void intel_mode_from_pipe_config(struct drm_display_mode *mode,
5853 				 struct intel_crtc_config *pipe_config)
5854 {
5855 	mode->hdisplay = pipe_config->adjusted_mode.crtc_hdisplay;
5856 	mode->htotal = pipe_config->adjusted_mode.crtc_htotal;
5857 	mode->hsync_start = pipe_config->adjusted_mode.crtc_hsync_start;
5858 	mode->hsync_end = pipe_config->adjusted_mode.crtc_hsync_end;
5859 
5860 	mode->vdisplay = pipe_config->adjusted_mode.crtc_vdisplay;
5861 	mode->vtotal = pipe_config->adjusted_mode.crtc_vtotal;
5862 	mode->vsync_start = pipe_config->adjusted_mode.crtc_vsync_start;
5863 	mode->vsync_end = pipe_config->adjusted_mode.crtc_vsync_end;
5864 
5865 	mode->flags = pipe_config->adjusted_mode.flags;
5866 
5867 	mode->clock = pipe_config->adjusted_mode.crtc_clock;
5868 	mode->flags |= pipe_config->adjusted_mode.flags;
5869 }
5870 
5871 static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc)
5872 {
5873 	struct drm_device *dev = intel_crtc->base.dev;
5874 	struct drm_i915_private *dev_priv = dev->dev_private;
5875 	uint32_t pipeconf;
5876 
5877 	pipeconf = 0;
5878 
5879 	if (dev_priv->quirks & QUIRK_PIPEA_FORCE &&
5880 	    I915_READ(PIPECONF(intel_crtc->pipe)) & PIPECONF_ENABLE)
5881 		pipeconf |= PIPECONF_ENABLE;
5882 
5883 	if (intel_crtc->config.double_wide)
5884 		pipeconf |= PIPECONF_DOUBLE_WIDE;
5885 
5886 	/* only g4x and later have fancy bpc/dither controls */
5887 	if (IS_G4X(dev) || IS_VALLEYVIEW(dev)) {
5888 		/* Bspec claims that we can't use dithering for 30bpp pipes. */
5889 		if (intel_crtc->config.dither && intel_crtc->config.pipe_bpp != 30)
5890 			pipeconf |= PIPECONF_DITHER_EN |
5891 				    PIPECONF_DITHER_TYPE_SP;
5892 
5893 		switch (intel_crtc->config.pipe_bpp) {
5894 		case 18:
5895 			pipeconf |= PIPECONF_6BPC;
5896 			break;
5897 		case 24:
5898 			pipeconf |= PIPECONF_8BPC;
5899 			break;
5900 		case 30:
5901 			pipeconf |= PIPECONF_10BPC;
5902 			break;
5903 		default:
5904 			/* Case prevented by intel_choose_pipe_bpp_dither. */
5905 			BUG();
5906 		}
5907 	}
5908 
5909 	if (HAS_PIPE_CXSR(dev)) {
5910 		if (intel_crtc->lowfreq_avail) {
5911 			DRM_DEBUG_KMS("enabling CxSR downclocking\n");
5912 			pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
5913 		} else {
5914 			DRM_DEBUG_KMS("disabling CxSR downclocking\n");
5915 		}
5916 	}
5917 
5918 	if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) {
5919 		if (INTEL_INFO(dev)->gen < 4 ||
5920 		    intel_pipe_has_type(&intel_crtc->base, INTEL_OUTPUT_SDVO))
5921 			pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
5922 		else
5923 			pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT;
5924 	} else
5925 		pipeconf |= PIPECONF_PROGRESSIVE;
5926 
5927 	if (IS_VALLEYVIEW(dev) && intel_crtc->config.limited_color_range)
5928 		pipeconf |= PIPECONF_COLOR_RANGE_SELECT;
5929 
5930 	I915_WRITE(PIPECONF(intel_crtc->pipe), pipeconf);
5931 	POSTING_READ(PIPECONF(intel_crtc->pipe));
5932 }
5933 
5934 static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
5935 			      int x, int y,
5936 			      struct drm_framebuffer *fb)
5937 {
5938 	struct drm_device *dev = crtc->dev;
5939 	struct drm_i915_private *dev_priv = dev->dev_private;
5940 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
5941 	int refclk, num_connectors = 0;
5942 	intel_clock_t clock, reduced_clock;
5943 	bool ok, has_reduced_clock = false;
5944 	bool is_lvds = false, is_dsi = false;
5945 	struct intel_encoder *encoder;
5946 	const intel_limit_t *limit;
5947 
5948 	for_each_encoder_on_crtc(dev, crtc, encoder) {
5949 		switch (encoder->type) {
5950 		case INTEL_OUTPUT_LVDS:
5951 			is_lvds = true;
5952 			break;
5953 		case INTEL_OUTPUT_DSI:
5954 			is_dsi = true;
5955 			break;
5956 		}
5957 
5958 		num_connectors++;
5959 	}
5960 
5961 	if (is_dsi)
5962 		return 0;
5963 
5964 	if (!intel_crtc->config.clock_set) {
5965 		refclk = i9xx_get_refclk(crtc, num_connectors);
5966 
5967 		/*
5968 		 * Returns a set of divisors for the desired target clock with
5969 		 * the given refclk, or FALSE.  The returned values represent
5970 		 * the clock equation: reflck * (5 * (m1 + 2) + (m2 + 2)) / (n +
5971 		 * 2) / p1 / p2.
5972 		 */
5973 		limit = intel_limit(crtc, refclk);
5974 		ok = dev_priv->display.find_dpll(limit, crtc,
5975 						 intel_crtc->config.port_clock,
5976 						 refclk, NULL, &clock);
5977 		if (!ok) {
5978 			DRM_ERROR("Couldn't find PLL settings for mode!\n");
5979 			return -EINVAL;
5980 		}
5981 
5982 		if (is_lvds && dev_priv->lvds_downclock_avail) {
5983 			/*
5984 			 * Ensure we match the reduced clock's P to the target
5985 			 * clock.  If the clocks don't match, we can't switch
5986 			 * the display clock by using the FP0/FP1. In such case
5987 			 * we will disable the LVDS downclock feature.
5988 			 */
5989 			has_reduced_clock =
5990 				dev_priv->display.find_dpll(limit, crtc,
5991 							    dev_priv->lvds_downclock,
5992 							    refclk, &clock,
5993 							    &reduced_clock);
5994 		}
5995 		/* Compat-code for transition, will disappear. */
5996 		intel_crtc->config.dpll.n = clock.n;
5997 		intel_crtc->config.dpll.m1 = clock.m1;
5998 		intel_crtc->config.dpll.m2 = clock.m2;
5999 		intel_crtc->config.dpll.p1 = clock.p1;
6000 		intel_crtc->config.dpll.p2 = clock.p2;
6001 	}
6002 
6003 	if (IS_GEN2(dev)) {
6004 		i8xx_update_pll(intel_crtc,
6005 				has_reduced_clock ? &reduced_clock : NULL,
6006 				num_connectors);
6007 	} else if (IS_CHERRYVIEW(dev)) {
6008 		chv_update_pll(intel_crtc);
6009 	} else if (IS_VALLEYVIEW(dev)) {
6010 		vlv_update_pll(intel_crtc);
6011 	} else {
6012 		i9xx_update_pll(intel_crtc,
6013 				has_reduced_clock ? &reduced_clock : NULL,
6014 				num_connectors);
6015 	}
6016 
6017 	return 0;
6018 }
6019 
6020 static void i9xx_get_pfit_config(struct intel_crtc *crtc,
6021 				 struct intel_crtc_config *pipe_config)
6022 {
6023 	struct drm_device *dev = crtc->base.dev;
6024 	struct drm_i915_private *dev_priv = dev->dev_private;
6025 	uint32_t tmp;
6026 
6027 	if (INTEL_INFO(dev)->gen <= 3 && (IS_I830(dev) || !IS_MOBILE(dev)))
6028 		return;
6029 
6030 	tmp = I915_READ(PFIT_CONTROL);
6031 	if (!(tmp & PFIT_ENABLE))
6032 		return;
6033 
6034 	/* Check whether the pfit is attached to our pipe. */
6035 	if (INTEL_INFO(dev)->gen < 4) {
6036 		if (crtc->pipe != PIPE_B)
6037 			return;
6038 	} else {
6039 		if ((tmp & PFIT_PIPE_MASK) != (crtc->pipe << PFIT_PIPE_SHIFT))
6040 			return;
6041 	}
6042 
6043 	pipe_config->gmch_pfit.control = tmp;
6044 	pipe_config->gmch_pfit.pgm_ratios = I915_READ(PFIT_PGM_RATIOS);
6045 	if (INTEL_INFO(dev)->gen < 5)
6046 		pipe_config->gmch_pfit.lvds_border_bits =
6047 			I915_READ(LVDS) & LVDS_BORDER_ENABLE;
6048 }
6049 
6050 static void vlv_crtc_clock_get(struct intel_crtc *crtc,
6051 			       struct intel_crtc_config *pipe_config)
6052 {
6053 	struct drm_device *dev = crtc->base.dev;
6054 	struct drm_i915_private *dev_priv = dev->dev_private;
6055 	int pipe = pipe_config->cpu_transcoder;
6056 	intel_clock_t clock;
6057 	u32 mdiv;
6058 	int refclk = 100000;
6059 
6060 	mutex_lock(&dev_priv->dpio_lock);
6061 	mdiv = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW3(pipe));
6062 	mutex_unlock(&dev_priv->dpio_lock);
6063 
6064 	clock.m1 = (mdiv >> DPIO_M1DIV_SHIFT) & 7;
6065 	clock.m2 = mdiv & DPIO_M2DIV_MASK;
6066 	clock.n = (mdiv >> DPIO_N_SHIFT) & 0xf;
6067 	clock.p1 = (mdiv >> DPIO_P1_SHIFT) & 7;
6068 	clock.p2 = (mdiv >> DPIO_P2_SHIFT) & 0x1f;
6069 
6070 	vlv_clock(refclk, &clock);
6071 
6072 	/* clock.dot is the fast clock */
6073 	pipe_config->port_clock = clock.dot / 5;
6074 }
6075 
6076 static void i9xx_get_plane_config(struct intel_crtc *crtc,
6077 				  struct intel_plane_config *plane_config)
6078 {
6079 	struct drm_device *dev = crtc->base.dev;
6080 	struct drm_i915_private *dev_priv = dev->dev_private;
6081 	u32 val, base, offset;
6082 	int pipe = crtc->pipe, plane = crtc->plane;
6083 	int fourcc, pixel_format;
6084 	int aligned_height;
6085 
6086 	crtc->base.primary->fb = kzalloc(sizeof(struct intel_framebuffer), GFP_KERNEL);
6087 	if (!crtc->base.primary->fb) {
6088 		DRM_DEBUG_KMS("failed to alloc fb\n");
6089 		return;
6090 	}
6091 
6092 	val = I915_READ(DSPCNTR(plane));
6093 
6094 	if (INTEL_INFO(dev)->gen >= 4)
6095 		if (val & DISPPLANE_TILED)
6096 			plane_config->tiled = true;
6097 
6098 	pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
6099 	fourcc = intel_format_to_fourcc(pixel_format);
6100 	crtc->base.primary->fb->pixel_format = fourcc;
6101 	crtc->base.primary->fb->bits_per_pixel =
6102 		drm_format_plane_cpp(fourcc, 0) * 8;
6103 
6104 	if (INTEL_INFO(dev)->gen >= 4) {
6105 		if (plane_config->tiled)
6106 			offset = I915_READ(DSPTILEOFF(plane));
6107 		else
6108 			offset = I915_READ(DSPLINOFF(plane));
6109 		base = I915_READ(DSPSURF(plane)) & 0xfffff000;
6110 	} else {
6111 		base = I915_READ(DSPADDR(plane));
6112 	}
6113 	plane_config->base = base;
6114 
6115 	val = I915_READ(PIPESRC(pipe));
6116 	crtc->base.primary->fb->width = ((val >> 16) & 0xfff) + 1;
6117 	crtc->base.primary->fb->height = ((val >> 0) & 0xfff) + 1;
6118 
6119 	val = I915_READ(DSPSTRIDE(pipe));
6120 	crtc->base.primary->fb->pitches[0] = val & 0xffffff80;
6121 
6122 	aligned_height = intel_align_height(dev, crtc->base.primary->fb->height,
6123 					    plane_config->tiled);
6124 
6125 	plane_config->size = ALIGN(crtc->base.primary->fb->pitches[0] *
6126 				   aligned_height, PAGE_SIZE);
6127 
6128 	DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
6129 		      pipe, plane, crtc->base.primary->fb->width,
6130 		      crtc->base.primary->fb->height,
6131 		      crtc->base.primary->fb->bits_per_pixel, base,
6132 		      crtc->base.primary->fb->pitches[0],
6133 		      plane_config->size);
6134 
6135 }
6136 
6137 static void chv_crtc_clock_get(struct intel_crtc *crtc,
6138 			       struct intel_crtc_config *pipe_config)
6139 {
6140 	struct drm_device *dev = crtc->base.dev;
6141 	struct drm_i915_private *dev_priv = dev->dev_private;
6142 	int pipe = pipe_config->cpu_transcoder;
6143 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
6144 	intel_clock_t clock;
6145 	u32 cmn_dw13, pll_dw0, pll_dw1, pll_dw2;
6146 	int refclk = 100000;
6147 
6148 	mutex_lock(&dev_priv->dpio_lock);
6149 	cmn_dw13 = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW13(port));
6150 	pll_dw0 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW0(port));
6151 	pll_dw1 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW1(port));
6152 	pll_dw2 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW2(port));
6153 	mutex_unlock(&dev_priv->dpio_lock);
6154 
6155 	clock.m1 = (pll_dw1 & 0x7) == DPIO_CHV_M1_DIV_BY_2 ? 2 : 0;
6156 	clock.m2 = ((pll_dw0 & 0xff) << 22) | (pll_dw2 & 0x3fffff);
6157 	clock.n = (pll_dw1 >> DPIO_CHV_N_DIV_SHIFT) & 0xf;
6158 	clock.p1 = (cmn_dw13 >> DPIO_CHV_P1_DIV_SHIFT) & 0x7;
6159 	clock.p2 = (cmn_dw13 >> DPIO_CHV_P2_DIV_SHIFT) & 0x1f;
6160 
6161 	chv_clock(refclk, &clock);
6162 
6163 	/* clock.dot is the fast clock */
6164 	pipe_config->port_clock = clock.dot / 5;
6165 }
6166 
6167 static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
6168 				 struct intel_crtc_config *pipe_config)
6169 {
6170 	struct drm_device *dev = crtc->base.dev;
6171 	struct drm_i915_private *dev_priv = dev->dev_private;
6172 	uint32_t tmp;
6173 
6174 	if (!intel_display_power_enabled(dev_priv,
6175 					 POWER_DOMAIN_PIPE(crtc->pipe)))
6176 		return false;
6177 
6178 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
6179 	pipe_config->shared_dpll = DPLL_ID_PRIVATE;
6180 
6181 	tmp = I915_READ(PIPECONF(crtc->pipe));
6182 	if (!(tmp & PIPECONF_ENABLE))
6183 		return false;
6184 
6185 	if (IS_G4X(dev) || IS_VALLEYVIEW(dev)) {
6186 		switch (tmp & PIPECONF_BPC_MASK) {
6187 		case PIPECONF_6BPC:
6188 			pipe_config->pipe_bpp = 18;
6189 			break;
6190 		case PIPECONF_8BPC:
6191 			pipe_config->pipe_bpp = 24;
6192 			break;
6193 		case PIPECONF_10BPC:
6194 			pipe_config->pipe_bpp = 30;
6195 			break;
6196 		default:
6197 			break;
6198 		}
6199 	}
6200 
6201 	if (IS_VALLEYVIEW(dev) && (tmp & PIPECONF_COLOR_RANGE_SELECT))
6202 		pipe_config->limited_color_range = true;
6203 
6204 	if (INTEL_INFO(dev)->gen < 4)
6205 		pipe_config->double_wide = tmp & PIPECONF_DOUBLE_WIDE;
6206 
6207 	intel_get_pipe_timings(crtc, pipe_config);
6208 
6209 	i9xx_get_pfit_config(crtc, pipe_config);
6210 
6211 	if (INTEL_INFO(dev)->gen >= 4) {
6212 		tmp = I915_READ(DPLL_MD(crtc->pipe));
6213 		pipe_config->pixel_multiplier =
6214 			((tmp & DPLL_MD_UDI_MULTIPLIER_MASK)
6215 			 >> DPLL_MD_UDI_MULTIPLIER_SHIFT) + 1;
6216 		pipe_config->dpll_hw_state.dpll_md = tmp;
6217 	} else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) {
6218 		tmp = I915_READ(DPLL(crtc->pipe));
6219 		pipe_config->pixel_multiplier =
6220 			((tmp & SDVO_MULTIPLIER_MASK)
6221 			 >> SDVO_MULTIPLIER_SHIFT_HIRES) + 1;
6222 	} else {
6223 		/* Note that on i915G/GM the pixel multiplier is in the sdvo
6224 		 * port and will be fixed up in the encoder->get_config
6225 		 * function. */
6226 		pipe_config->pixel_multiplier = 1;
6227 	}
6228 	pipe_config->dpll_hw_state.dpll = I915_READ(DPLL(crtc->pipe));
6229 	if (!IS_VALLEYVIEW(dev)) {
6230 		pipe_config->dpll_hw_state.fp0 = I915_READ(FP0(crtc->pipe));
6231 		pipe_config->dpll_hw_state.fp1 = I915_READ(FP1(crtc->pipe));
6232 	} else {
6233 		/* Mask out read-only status bits. */
6234 		pipe_config->dpll_hw_state.dpll &= ~(DPLL_LOCK_VLV |
6235 						     DPLL_PORTC_READY_MASK |
6236 						     DPLL_PORTB_READY_MASK);
6237 	}
6238 
6239 	if (IS_CHERRYVIEW(dev))
6240 		chv_crtc_clock_get(crtc, pipe_config);
6241 	else if (IS_VALLEYVIEW(dev))
6242 		vlv_crtc_clock_get(crtc, pipe_config);
6243 	else
6244 		i9xx_crtc_clock_get(crtc, pipe_config);
6245 
6246 	return true;
6247 }
6248 
6249 static void ironlake_init_pch_refclk(struct drm_device *dev)
6250 {
6251 	struct drm_i915_private *dev_priv = dev->dev_private;
6252 	struct drm_mode_config *mode_config = &dev->mode_config;
6253 	struct intel_encoder *encoder;
6254 	u32 val, final;
6255 	bool has_lvds = false;
6256 	bool has_cpu_edp = false;
6257 	bool has_panel = false;
6258 	bool has_ck505 = false;
6259 	bool can_ssc = false;
6260 
6261 	/* We need to take the global config into account */
6262 	list_for_each_entry(encoder, &mode_config->encoder_list,
6263 			    base.head) {
6264 		switch (encoder->type) {
6265 		case INTEL_OUTPUT_LVDS:
6266 			has_panel = true;
6267 			has_lvds = true;
6268 			break;
6269 		case INTEL_OUTPUT_EDP:
6270 			has_panel = true;
6271 			if (enc_to_dig_port(&encoder->base)->port == PORT_A)
6272 				has_cpu_edp = true;
6273 			break;
6274 		}
6275 	}
6276 
6277 	if (HAS_PCH_IBX(dev)) {
6278 		has_ck505 = dev_priv->vbt.display_clock_mode;
6279 		can_ssc = has_ck505;
6280 	} else {
6281 		has_ck505 = false;
6282 		can_ssc = true;
6283 	}
6284 
6285 	DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d\n",
6286 		      has_panel, has_lvds, has_ck505);
6287 
6288 	/* Ironlake: try to setup display ref clock before DPLL
6289 	 * enabling. This is only under driver's control after
6290 	 * PCH B stepping, previous chipset stepping should be
6291 	 * ignoring this setting.
6292 	 */
6293 	val = I915_READ(PCH_DREF_CONTROL);
6294 
6295 	/* As we must carefully and slowly disable/enable each source in turn,
6296 	 * compute the final state we want first and check if we need to
6297 	 * make any changes at all.
6298 	 */
6299 	final = val;
6300 	final &= ~DREF_NONSPREAD_SOURCE_MASK;
6301 	if (has_ck505)
6302 		final |= DREF_NONSPREAD_CK505_ENABLE;
6303 	else
6304 		final |= DREF_NONSPREAD_SOURCE_ENABLE;
6305 
6306 	final &= ~DREF_SSC_SOURCE_MASK;
6307 	final &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
6308 	final &= ~DREF_SSC1_ENABLE;
6309 
6310 	if (has_panel) {
6311 		final |= DREF_SSC_SOURCE_ENABLE;
6312 
6313 		if (intel_panel_use_ssc(dev_priv) && can_ssc)
6314 			final |= DREF_SSC1_ENABLE;
6315 
6316 		if (has_cpu_edp) {
6317 			if (intel_panel_use_ssc(dev_priv) && can_ssc)
6318 				final |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
6319 			else
6320 				final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
6321 		} else
6322 			final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
6323 	} else {
6324 		final |= DREF_SSC_SOURCE_DISABLE;
6325 		final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
6326 	}
6327 
6328 	if (final == val)
6329 		return;
6330 
6331 	/* Always enable nonspread source */
6332 	val &= ~DREF_NONSPREAD_SOURCE_MASK;
6333 
6334 	if (has_ck505)
6335 		val |= DREF_NONSPREAD_CK505_ENABLE;
6336 	else
6337 		val |= DREF_NONSPREAD_SOURCE_ENABLE;
6338 
6339 	if (has_panel) {
6340 		val &= ~DREF_SSC_SOURCE_MASK;
6341 		val |= DREF_SSC_SOURCE_ENABLE;
6342 
6343 		/* SSC must be turned on before enabling the CPU output  */
6344 		if (intel_panel_use_ssc(dev_priv) && can_ssc) {
6345 			DRM_DEBUG_KMS("Using SSC on panel\n");
6346 			val |= DREF_SSC1_ENABLE;
6347 		} else
6348 			val &= ~DREF_SSC1_ENABLE;
6349 
6350 		/* Get SSC going before enabling the outputs */
6351 		I915_WRITE(PCH_DREF_CONTROL, val);
6352 		POSTING_READ(PCH_DREF_CONTROL);
6353 		udelay(200);
6354 
6355 		val &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
6356 
6357 		/* Enable CPU source on CPU attached eDP */
6358 		if (has_cpu_edp) {
6359 			if (intel_panel_use_ssc(dev_priv) && can_ssc) {
6360 				DRM_DEBUG_KMS("Using SSC on eDP\n");
6361 				val |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
6362 			} else
6363 				val |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
6364 		} else
6365 			val |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
6366 
6367 		I915_WRITE(PCH_DREF_CONTROL, val);
6368 		POSTING_READ(PCH_DREF_CONTROL);
6369 		udelay(200);
6370 	} else {
6371 		DRM_DEBUG_KMS("Disabling SSC entirely\n");
6372 
6373 		val &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
6374 
6375 		/* Turn off CPU output */
6376 		val |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
6377 
6378 		I915_WRITE(PCH_DREF_CONTROL, val);
6379 		POSTING_READ(PCH_DREF_CONTROL);
6380 		udelay(200);
6381 
6382 		/* Turn off the SSC source */
6383 		val &= ~DREF_SSC_SOURCE_MASK;
6384 		val |= DREF_SSC_SOURCE_DISABLE;
6385 
6386 		/* Turn off SSC1 */
6387 		val &= ~DREF_SSC1_ENABLE;
6388 
6389 		I915_WRITE(PCH_DREF_CONTROL, val);
6390 		POSTING_READ(PCH_DREF_CONTROL);
6391 		udelay(200);
6392 	}
6393 
6394 	BUG_ON(val != final);
6395 }
6396 
6397 static void lpt_reset_fdi_mphy(struct drm_i915_private *dev_priv)
6398 {
6399 	uint32_t tmp;
6400 
6401 	tmp = I915_READ(SOUTH_CHICKEN2);
6402 	tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
6403 	I915_WRITE(SOUTH_CHICKEN2, tmp);
6404 
6405 	if (wait_for_atomic_us(I915_READ(SOUTH_CHICKEN2) &
6406 			       FDI_MPHY_IOSFSB_RESET_STATUS, 100))
6407 		DRM_ERROR("FDI mPHY reset assert timeout\n");
6408 
6409 	tmp = I915_READ(SOUTH_CHICKEN2);
6410 	tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
6411 	I915_WRITE(SOUTH_CHICKEN2, tmp);
6412 
6413 	if (wait_for_atomic_us((I915_READ(SOUTH_CHICKEN2) &
6414 				FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100))
6415 		DRM_ERROR("FDI mPHY reset de-assert timeout\n");
6416 }
6417 
6418 /* WaMPhyProgramming:hsw */
6419 static void lpt_program_fdi_mphy(struct drm_i915_private *dev_priv)
6420 {
6421 	uint32_t tmp;
6422 
6423 	tmp = intel_sbi_read(dev_priv, 0x8008, SBI_MPHY);
6424 	tmp &= ~(0xFF << 24);
6425 	tmp |= (0x12 << 24);
6426 	intel_sbi_write(dev_priv, 0x8008, tmp, SBI_MPHY);
6427 
6428 	tmp = intel_sbi_read(dev_priv, 0x2008, SBI_MPHY);
6429 	tmp |= (1 << 11);
6430 	intel_sbi_write(dev_priv, 0x2008, tmp, SBI_MPHY);
6431 
6432 	tmp = intel_sbi_read(dev_priv, 0x2108, SBI_MPHY);
6433 	tmp |= (1 << 11);
6434 	intel_sbi_write(dev_priv, 0x2108, tmp, SBI_MPHY);
6435 
6436 	tmp = intel_sbi_read(dev_priv, 0x206C, SBI_MPHY);
6437 	tmp |= (1 << 24) | (1 << 21) | (1 << 18);
6438 	intel_sbi_write(dev_priv, 0x206C, tmp, SBI_MPHY);
6439 
6440 	tmp = intel_sbi_read(dev_priv, 0x216C, SBI_MPHY);
6441 	tmp |= (1 << 24) | (1 << 21) | (1 << 18);
6442 	intel_sbi_write(dev_priv, 0x216C, tmp, SBI_MPHY);
6443 
6444 	tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY);
6445 	tmp &= ~(7 << 13);
6446 	tmp |= (5 << 13);
6447 	intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY);
6448 
6449 	tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY);
6450 	tmp &= ~(7 << 13);
6451 	tmp |= (5 << 13);
6452 	intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY);
6453 
6454 	tmp = intel_sbi_read(dev_priv, 0x208C, SBI_MPHY);
6455 	tmp &= ~0xFF;
6456 	tmp |= 0x1C;
6457 	intel_sbi_write(dev_priv, 0x208C, tmp, SBI_MPHY);
6458 
6459 	tmp = intel_sbi_read(dev_priv, 0x218C, SBI_MPHY);
6460 	tmp &= ~0xFF;
6461 	tmp |= 0x1C;
6462 	intel_sbi_write(dev_priv, 0x218C, tmp, SBI_MPHY);
6463 
6464 	tmp = intel_sbi_read(dev_priv, 0x2098, SBI_MPHY);
6465 	tmp &= ~(0xFF << 16);
6466 	tmp |= (0x1C << 16);
6467 	intel_sbi_write(dev_priv, 0x2098, tmp, SBI_MPHY);
6468 
6469 	tmp = intel_sbi_read(dev_priv, 0x2198, SBI_MPHY);
6470 	tmp &= ~(0xFF << 16);
6471 	tmp |= (0x1C << 16);
6472 	intel_sbi_write(dev_priv, 0x2198, tmp, SBI_MPHY);
6473 
6474 	tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY);
6475 	tmp |= (1 << 27);
6476 	intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY);
6477 
6478 	tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY);
6479 	tmp |= (1 << 27);
6480 	intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY);
6481 
6482 	tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY);
6483 	tmp &= ~(0xF << 28);
6484 	tmp |= (4 << 28);
6485 	intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY);
6486 
6487 	tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY);
6488 	tmp &= ~(0xF << 28);
6489 	tmp |= (4 << 28);
6490 	intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY);
6491 }
6492 
6493 /* Implements 3 different sequences from BSpec chapter "Display iCLK
6494  * Programming" based on the parameters passed:
6495  * - Sequence to enable CLKOUT_DP
6496  * - Sequence to enable CLKOUT_DP without spread
6497  * - Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O
6498  */
6499 static void lpt_enable_clkout_dp(struct drm_device *dev, bool with_spread,
6500 				 bool with_fdi)
6501 {
6502 	struct drm_i915_private *dev_priv = dev->dev_private;
6503 	uint32_t reg, tmp;
6504 
6505 	if (WARN(with_fdi && !with_spread, "FDI requires downspread\n"))
6506 		with_spread = true;
6507 	if (WARN(dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE &&
6508 		 with_fdi, "LP PCH doesn't have FDI\n"))
6509 		with_fdi = false;
6510 
6511 	mutex_lock(&dev_priv->dpio_lock);
6512 
6513 	tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
6514 	tmp &= ~SBI_SSCCTL_DISABLE;
6515 	tmp |= SBI_SSCCTL_PATHALT;
6516 	intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
6517 
6518 	udelay(24);
6519 
6520 	if (with_spread) {
6521 		tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
6522 		tmp &= ~SBI_SSCCTL_PATHALT;
6523 		intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
6524 
6525 		if (with_fdi) {
6526 			lpt_reset_fdi_mphy(dev_priv);
6527 			lpt_program_fdi_mphy(dev_priv);
6528 		}
6529 	}
6530 
6531 	reg = (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) ?
6532 	       SBI_GEN0 : SBI_DBUFF0;
6533 	tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
6534 	tmp |= SBI_GEN0_CFG_BUFFENABLE_DISABLE;
6535 	intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
6536 
6537 	mutex_unlock(&dev_priv->dpio_lock);
6538 }
6539 
6540 /* Sequence to disable CLKOUT_DP */
6541 static void lpt_disable_clkout_dp(struct drm_device *dev)
6542 {
6543 	struct drm_i915_private *dev_priv = dev->dev_private;
6544 	uint32_t reg, tmp;
6545 
6546 	mutex_lock(&dev_priv->dpio_lock);
6547 
6548 	reg = (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) ?
6549 	       SBI_GEN0 : SBI_DBUFF0;
6550 	tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
6551 	tmp &= ~SBI_GEN0_CFG_BUFFENABLE_DISABLE;
6552 	intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
6553 
6554 	tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
6555 	if (!(tmp & SBI_SSCCTL_DISABLE)) {
6556 		if (!(tmp & SBI_SSCCTL_PATHALT)) {
6557 			tmp |= SBI_SSCCTL_PATHALT;
6558 			intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
6559 			udelay(32);
6560 		}
6561 		tmp |= SBI_SSCCTL_DISABLE;
6562 		intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
6563 	}
6564 
6565 	mutex_unlock(&dev_priv->dpio_lock);
6566 }
6567 
6568 static void lpt_init_pch_refclk(struct drm_device *dev)
6569 {
6570 	struct drm_mode_config *mode_config = &dev->mode_config;
6571 	struct intel_encoder *encoder;
6572 	bool has_vga = false;
6573 
6574 	list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
6575 		switch (encoder->type) {
6576 		case INTEL_OUTPUT_ANALOG:
6577 			has_vga = true;
6578 			break;
6579 		}
6580 	}
6581 
6582 	if (has_vga)
6583 		lpt_enable_clkout_dp(dev, true, true);
6584 	else
6585 		lpt_disable_clkout_dp(dev);
6586 }
6587 
6588 /*
6589  * Initialize reference clocks when the driver loads
6590  */
6591 void intel_init_pch_refclk(struct drm_device *dev)
6592 {
6593 	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
6594 		ironlake_init_pch_refclk(dev);
6595 	else if (HAS_PCH_LPT(dev))
6596 		lpt_init_pch_refclk(dev);
6597 }
6598 
6599 static int ironlake_get_refclk(struct drm_crtc *crtc)
6600 {
6601 	struct drm_device *dev = crtc->dev;
6602 	struct drm_i915_private *dev_priv = dev->dev_private;
6603 	struct intel_encoder *encoder;
6604 	int num_connectors = 0;
6605 	bool is_lvds = false;
6606 
6607 	for_each_encoder_on_crtc(dev, crtc, encoder) {
6608 		switch (encoder->type) {
6609 		case INTEL_OUTPUT_LVDS:
6610 			is_lvds = true;
6611 			break;
6612 		}
6613 		num_connectors++;
6614 	}
6615 
6616 	if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
6617 		DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n",
6618 			      dev_priv->vbt.lvds_ssc_freq);
6619 		return dev_priv->vbt.lvds_ssc_freq;
6620 	}
6621 
6622 	return 120000;
6623 }
6624 
6625 static void ironlake_set_pipeconf(struct drm_crtc *crtc)
6626 {
6627 	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
6628 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
6629 	int pipe = intel_crtc->pipe;
6630 	uint32_t val;
6631 
6632 	val = 0;
6633 
6634 	switch (intel_crtc->config.pipe_bpp) {
6635 	case 18:
6636 		val |= PIPECONF_6BPC;
6637 		break;
6638 	case 24:
6639 		val |= PIPECONF_8BPC;
6640 		break;
6641 	case 30:
6642 		val |= PIPECONF_10BPC;
6643 		break;
6644 	case 36:
6645 		val |= PIPECONF_12BPC;
6646 		break;
6647 	default:
6648 		/* Case prevented by intel_choose_pipe_bpp_dither. */
6649 		BUG();
6650 	}
6651 
6652 	if (intel_crtc->config.dither)
6653 		val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
6654 
6655 	if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
6656 		val |= PIPECONF_INTERLACED_ILK;
6657 	else
6658 		val |= PIPECONF_PROGRESSIVE;
6659 
6660 	if (intel_crtc->config.limited_color_range)
6661 		val |= PIPECONF_COLOR_RANGE_SELECT;
6662 
6663 	I915_WRITE(PIPECONF(pipe), val);
6664 	POSTING_READ(PIPECONF(pipe));
6665 }
6666 
6667 /*
6668  * Set up the pipe CSC unit.
6669  *
6670  * Currently only full range RGB to limited range RGB conversion
6671  * is supported, but eventually this should handle various
6672  * RGB<->YCbCr scenarios as well.
6673  */
6674 static void intel_set_pipe_csc(struct drm_crtc *crtc)
6675 {
6676 	struct drm_device *dev = crtc->dev;
6677 	struct drm_i915_private *dev_priv = dev->dev_private;
6678 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
6679 	int pipe = intel_crtc->pipe;
6680 	uint16_t coeff = 0x7800; /* 1.0 */
6681 
6682 	/*
6683 	 * TODO: Check what kind of values actually come out of the pipe
6684 	 * with these coeff/postoff values and adjust to get the best
6685 	 * accuracy. Perhaps we even need to take the bpc value into
6686 	 * consideration.
6687 	 */
6688 
6689 	if (intel_crtc->config.limited_color_range)
6690 		coeff = ((235 - 16) * (1 << 12) / 255) & 0xff8; /* 0.xxx... */
6691 
6692 	/*
6693 	 * GY/GU and RY/RU should be the other way around according
6694 	 * to BSpec, but reality doesn't agree. Just set them up in
6695 	 * a way that results in the correct picture.
6696 	 */
6697 	I915_WRITE(PIPE_CSC_COEFF_RY_GY(pipe), coeff << 16);
6698 	I915_WRITE(PIPE_CSC_COEFF_BY(pipe), 0);
6699 
6700 	I915_WRITE(PIPE_CSC_COEFF_RU_GU(pipe), coeff);
6701 	I915_WRITE(PIPE_CSC_COEFF_BU(pipe), 0);
6702 
6703 	I915_WRITE(PIPE_CSC_COEFF_RV_GV(pipe), 0);
6704 	I915_WRITE(PIPE_CSC_COEFF_BV(pipe), coeff << 16);
6705 
6706 	I915_WRITE(PIPE_CSC_PREOFF_HI(pipe), 0);
6707 	I915_WRITE(PIPE_CSC_PREOFF_ME(pipe), 0);
6708 	I915_WRITE(PIPE_CSC_PREOFF_LO(pipe), 0);
6709 
6710 	if (INTEL_INFO(dev)->gen > 6) {
6711 		uint16_t postoff = 0;
6712 
6713 		if (intel_crtc->config.limited_color_range)
6714 			postoff = (16 * (1 << 12) / 255) & 0x1fff;
6715 
6716 		I915_WRITE(PIPE_CSC_POSTOFF_HI(pipe), postoff);
6717 		I915_WRITE(PIPE_CSC_POSTOFF_ME(pipe), postoff);
6718 		I915_WRITE(PIPE_CSC_POSTOFF_LO(pipe), postoff);
6719 
6720 		I915_WRITE(PIPE_CSC_MODE(pipe), 0);
6721 	} else {
6722 		uint32_t mode = CSC_MODE_YUV_TO_RGB;
6723 
6724 		if (intel_crtc->config.limited_color_range)
6725 			mode |= CSC_BLACK_SCREEN_OFFSET;
6726 
6727 		I915_WRITE(PIPE_CSC_MODE(pipe), mode);
6728 	}
6729 }
6730 
6731 static void haswell_set_pipeconf(struct drm_crtc *crtc)
6732 {
6733 	struct drm_device *dev = crtc->dev;
6734 	struct drm_i915_private *dev_priv = dev->dev_private;
6735 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
6736 	enum i915_pipe pipe = intel_crtc->pipe;
6737 	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
6738 	uint32_t val;
6739 
6740 	val = 0;
6741 
6742 	if (IS_HASWELL(dev) && intel_crtc->config.dither)
6743 		val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
6744 
6745 	if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
6746 		val |= PIPECONF_INTERLACED_ILK;
6747 	else
6748 		val |= PIPECONF_PROGRESSIVE;
6749 
6750 	I915_WRITE(PIPECONF(cpu_transcoder), val);
6751 	POSTING_READ(PIPECONF(cpu_transcoder));
6752 
6753 	I915_WRITE(GAMMA_MODE(intel_crtc->pipe), GAMMA_MODE_MODE_8BIT);
6754 	POSTING_READ(GAMMA_MODE(intel_crtc->pipe));
6755 
6756 	if (IS_BROADWELL(dev)) {
6757 		val = 0;
6758 
6759 		switch (intel_crtc->config.pipe_bpp) {
6760 		case 18:
6761 			val |= PIPEMISC_DITHER_6_BPC;
6762 			break;
6763 		case 24:
6764 			val |= PIPEMISC_DITHER_8_BPC;
6765 			break;
6766 		case 30:
6767 			val |= PIPEMISC_DITHER_10_BPC;
6768 			break;
6769 		case 36:
6770 			val |= PIPEMISC_DITHER_12_BPC;
6771 			break;
6772 		default:
6773 			/* Case prevented by pipe_config_set_bpp. */
6774 			BUG();
6775 		}
6776 
6777 		if (intel_crtc->config.dither)
6778 			val |= PIPEMISC_DITHER_ENABLE | PIPEMISC_DITHER_TYPE_SP;
6779 
6780 		I915_WRITE(PIPEMISC(pipe), val);
6781 	}
6782 }
6783 
6784 static bool ironlake_compute_clocks(struct drm_crtc *crtc,
6785 				    intel_clock_t *clock,
6786 				    bool *has_reduced_clock,
6787 				    intel_clock_t *reduced_clock)
6788 {
6789 	struct drm_device *dev = crtc->dev;
6790 	struct drm_i915_private *dev_priv = dev->dev_private;
6791 	struct intel_encoder *intel_encoder;
6792 	int refclk;
6793 	const intel_limit_t *limit;
6794 	bool ret, is_lvds = false;
6795 
6796 	for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
6797 		switch (intel_encoder->type) {
6798 		case INTEL_OUTPUT_LVDS:
6799 			is_lvds = true;
6800 			break;
6801 		}
6802 	}
6803 
6804 	refclk = ironlake_get_refclk(crtc);
6805 
6806 	/*
6807 	 * Returns a set of divisors for the desired target clock with the given
6808 	 * refclk, or FALSE.  The returned values represent the clock equation:
6809 	 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
6810 	 */
6811 	limit = intel_limit(crtc, refclk);
6812 	ret = dev_priv->display.find_dpll(limit, crtc,
6813 					  to_intel_crtc(crtc)->config.port_clock,
6814 					  refclk, NULL, clock);
6815 	if (!ret)
6816 		return false;
6817 
6818 	if (is_lvds && dev_priv->lvds_downclock_avail) {
6819 		/*
6820 		 * Ensure we match the reduced clock's P to the target clock.
6821 		 * If the clocks don't match, we can't switch the display clock
6822 		 * by using the FP0/FP1. In such case we will disable the LVDS
6823 		 * downclock feature.
6824 		*/
6825 		*has_reduced_clock =
6826 			dev_priv->display.find_dpll(limit, crtc,
6827 						    dev_priv->lvds_downclock,
6828 						    refclk, clock,
6829 						    reduced_clock);
6830 	}
6831 
6832 	return true;
6833 }
6834 
6835 int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp)
6836 {
6837 	/*
6838 	 * Account for spread spectrum to avoid
6839 	 * oversubscribing the link. Max center spread
6840 	 * is 2.5%; use 5% for safety's sake.
6841 	 */
6842 	u32 bps = target_clock * bpp * 21 / 20;
6843 	return DIV_ROUND_UP(bps, link_bw * 8);
6844 }
6845 
6846 static bool ironlake_needs_fb_cb_tune(struct dpll *dpll, int factor)
6847 {
6848 	return i9xx_dpll_compute_m(dpll) < factor * dpll->n;
6849 }
6850 
6851 static uint32_t ironlake_compute_dpll(struct intel_crtc *intel_crtc,
6852 				      u32 *fp,
6853 				      intel_clock_t *reduced_clock, u32 *fp2)
6854 {
6855 	struct drm_crtc *crtc = &intel_crtc->base;
6856 	struct drm_device *dev = crtc->dev;
6857 	struct drm_i915_private *dev_priv = dev->dev_private;
6858 	struct intel_encoder *intel_encoder;
6859 	uint32_t dpll;
6860 	int factor, num_connectors = 0;
6861 	bool is_lvds = false, is_sdvo = false;
6862 
6863 	for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
6864 		switch (intel_encoder->type) {
6865 		case INTEL_OUTPUT_LVDS:
6866 			is_lvds = true;
6867 			break;
6868 		case INTEL_OUTPUT_SDVO:
6869 		case INTEL_OUTPUT_HDMI:
6870 			is_sdvo = true;
6871 			break;
6872 		}
6873 
6874 		num_connectors++;
6875 	}
6876 
6877 	/* Enable autotuning of the PLL clock (if permissible) */
6878 	factor = 21;
6879 	if (is_lvds) {
6880 		if ((intel_panel_use_ssc(dev_priv) &&
6881 		     dev_priv->vbt.lvds_ssc_freq == 100000) ||
6882 		    (HAS_PCH_IBX(dev) && intel_is_dual_link_lvds(dev)))
6883 			factor = 25;
6884 	} else if (intel_crtc->config.sdvo_tv_clock)
6885 		factor = 20;
6886 
6887 	if (ironlake_needs_fb_cb_tune(&intel_crtc->config.dpll, factor))
6888 		*fp |= FP_CB_TUNE;
6889 
6890 	if (fp2 && (reduced_clock->m < factor * reduced_clock->n))
6891 		*fp2 |= FP_CB_TUNE;
6892 
6893 	dpll = 0;
6894 
6895 	if (is_lvds)
6896 		dpll |= DPLLB_MODE_LVDS;
6897 	else
6898 		dpll |= DPLLB_MODE_DAC_SERIAL;
6899 
6900 	dpll |= (intel_crtc->config.pixel_multiplier - 1)
6901 		<< PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
6902 
6903 	if (is_sdvo)
6904 		dpll |= DPLL_SDVO_HIGH_SPEED;
6905 	if (intel_crtc->config.has_dp_encoder)
6906 		dpll |= DPLL_SDVO_HIGH_SPEED;
6907 
6908 	/* compute bitmask from p1 value */
6909 	dpll |= (1 << (intel_crtc->config.dpll.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
6910 	/* also FPA1 */
6911 	dpll |= (1 << (intel_crtc->config.dpll.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
6912 
6913 	switch (intel_crtc->config.dpll.p2) {
6914 	case 5:
6915 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
6916 		break;
6917 	case 7:
6918 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
6919 		break;
6920 	case 10:
6921 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
6922 		break;
6923 	case 14:
6924 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
6925 		break;
6926 	}
6927 
6928 	if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2)
6929 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
6930 	else
6931 		dpll |= PLL_REF_INPUT_DREFCLK;
6932 
6933 	return dpll | DPLL_VCO_ENABLE;
6934 }
6935 
6936 static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
6937 				  int x, int y,
6938 				  struct drm_framebuffer *fb)
6939 {
6940 	struct drm_device *dev = crtc->dev;
6941 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
6942 	int num_connectors = 0;
6943 	intel_clock_t clock, reduced_clock;
6944 	u32 dpll = 0, fp = 0, fp2 = 0;
6945 	bool ok, has_reduced_clock = false;
6946 	bool is_lvds = false;
6947 	struct intel_encoder *encoder;
6948 	struct intel_shared_dpll *pll;
6949 
6950 	for_each_encoder_on_crtc(dev, crtc, encoder) {
6951 		switch (encoder->type) {
6952 		case INTEL_OUTPUT_LVDS:
6953 			is_lvds = true;
6954 			break;
6955 		}
6956 
6957 		num_connectors++;
6958 	}
6959 
6960 	WARN(!(HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)),
6961 	     "Unexpected PCH type %d\n", INTEL_PCH_TYPE(dev));
6962 
6963 	ok = ironlake_compute_clocks(crtc, &clock,
6964 				     &has_reduced_clock, &reduced_clock);
6965 	if (!ok && !intel_crtc->config.clock_set) {
6966 		DRM_ERROR("Couldn't find PLL settings for mode!\n");
6967 		return -EINVAL;
6968 	}
6969 	/* Compat-code for transition, will disappear. */
6970 	if (!intel_crtc->config.clock_set) {
6971 		intel_crtc->config.dpll.n = clock.n;
6972 		intel_crtc->config.dpll.m1 = clock.m1;
6973 		intel_crtc->config.dpll.m2 = clock.m2;
6974 		intel_crtc->config.dpll.p1 = clock.p1;
6975 		intel_crtc->config.dpll.p2 = clock.p2;
6976 	}
6977 
6978 	/* CPU eDP is the only output that doesn't need a PCH PLL of its own. */
6979 	if (intel_crtc->config.has_pch_encoder) {
6980 		fp = i9xx_dpll_compute_fp(&intel_crtc->config.dpll);
6981 		if (has_reduced_clock)
6982 			fp2 = i9xx_dpll_compute_fp(&reduced_clock);
6983 
6984 		dpll = ironlake_compute_dpll(intel_crtc,
6985 					     &fp, &reduced_clock,
6986 					     has_reduced_clock ? &fp2 : NULL);
6987 
6988 		intel_crtc->config.dpll_hw_state.dpll = dpll;
6989 		intel_crtc->config.dpll_hw_state.fp0 = fp;
6990 		if (has_reduced_clock)
6991 			intel_crtc->config.dpll_hw_state.fp1 = fp2;
6992 		else
6993 			intel_crtc->config.dpll_hw_state.fp1 = fp;
6994 
6995 		pll = intel_get_shared_dpll(intel_crtc);
6996 		if (pll == NULL) {
6997 			DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
6998 					 pipe_name(intel_crtc->pipe));
6999 			return -EINVAL;
7000 		}
7001 	} else
7002 		intel_put_shared_dpll(intel_crtc);
7003 
7004 	if (is_lvds && has_reduced_clock && i915.powersave)
7005 		intel_crtc->lowfreq_avail = true;
7006 	else
7007 		intel_crtc->lowfreq_avail = false;
7008 
7009 	return 0;
7010 }
7011 
7012 static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc,
7013 					 struct intel_link_m_n *m_n)
7014 {
7015 	struct drm_device *dev = crtc->base.dev;
7016 	struct drm_i915_private *dev_priv = dev->dev_private;
7017 	enum i915_pipe pipe = crtc->pipe;
7018 
7019 	m_n->link_m = I915_READ(PCH_TRANS_LINK_M1(pipe));
7020 	m_n->link_n = I915_READ(PCH_TRANS_LINK_N1(pipe));
7021 	m_n->gmch_m = I915_READ(PCH_TRANS_DATA_M1(pipe))
7022 		& ~TU_SIZE_MASK;
7023 	m_n->gmch_n = I915_READ(PCH_TRANS_DATA_N1(pipe));
7024 	m_n->tu = ((I915_READ(PCH_TRANS_DATA_M1(pipe))
7025 		    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
7026 }
7027 
7028 static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
7029 					 enum transcoder transcoder,
7030 					 struct intel_link_m_n *m_n)
7031 {
7032 	struct drm_device *dev = crtc->base.dev;
7033 	struct drm_i915_private *dev_priv = dev->dev_private;
7034 	enum i915_pipe pipe = crtc->pipe;
7035 
7036 	if (INTEL_INFO(dev)->gen >= 5) {
7037 		m_n->link_m = I915_READ(PIPE_LINK_M1(transcoder));
7038 		m_n->link_n = I915_READ(PIPE_LINK_N1(transcoder));
7039 		m_n->gmch_m = I915_READ(PIPE_DATA_M1(transcoder))
7040 			& ~TU_SIZE_MASK;
7041 		m_n->gmch_n = I915_READ(PIPE_DATA_N1(transcoder));
7042 		m_n->tu = ((I915_READ(PIPE_DATA_M1(transcoder))
7043 			    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
7044 	} else {
7045 		m_n->link_m = I915_READ(PIPE_LINK_M_G4X(pipe));
7046 		m_n->link_n = I915_READ(PIPE_LINK_N_G4X(pipe));
7047 		m_n->gmch_m = I915_READ(PIPE_DATA_M_G4X(pipe))
7048 			& ~TU_SIZE_MASK;
7049 		m_n->gmch_n = I915_READ(PIPE_DATA_N_G4X(pipe));
7050 		m_n->tu = ((I915_READ(PIPE_DATA_M_G4X(pipe))
7051 			    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
7052 	}
7053 }
7054 
7055 void intel_dp_get_m_n(struct intel_crtc *crtc,
7056 		      struct intel_crtc_config *pipe_config)
7057 {
7058 	if (crtc->config.has_pch_encoder)
7059 		intel_pch_transcoder_get_m_n(crtc, &pipe_config->dp_m_n);
7060 	else
7061 		intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
7062 					     &pipe_config->dp_m_n);
7063 }
7064 
7065 static void ironlake_get_fdi_m_n_config(struct intel_crtc *crtc,
7066 					struct intel_crtc_config *pipe_config)
7067 {
7068 	intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
7069 				     &pipe_config->fdi_m_n);
7070 }
7071 
7072 static void ironlake_get_pfit_config(struct intel_crtc *crtc,
7073 				     struct intel_crtc_config *pipe_config)
7074 {
7075 	struct drm_device *dev = crtc->base.dev;
7076 	struct drm_i915_private *dev_priv = dev->dev_private;
7077 	uint32_t tmp;
7078 
7079 	tmp = I915_READ(PF_CTL(crtc->pipe));
7080 
7081 	if (tmp & PF_ENABLE) {
7082 		pipe_config->pch_pfit.enabled = true;
7083 		pipe_config->pch_pfit.pos = I915_READ(PF_WIN_POS(crtc->pipe));
7084 		pipe_config->pch_pfit.size = I915_READ(PF_WIN_SZ(crtc->pipe));
7085 
7086 		/* We currently do not free assignements of panel fitters on
7087 		 * ivb/hsw (since we don't use the higher upscaling modes which
7088 		 * differentiates them) so just WARN about this case for now. */
7089 		if (IS_GEN7(dev)) {
7090 			WARN_ON((tmp & PF_PIPE_SEL_MASK_IVB) !=
7091 				PF_PIPE_SEL_IVB(crtc->pipe));
7092 		}
7093 	}
7094 }
7095 
7096 static void ironlake_get_plane_config(struct intel_crtc *crtc,
7097 				      struct intel_plane_config *plane_config)
7098 {
7099 	struct drm_device *dev = crtc->base.dev;
7100 	struct drm_i915_private *dev_priv = dev->dev_private;
7101 	u32 val, base, offset;
7102 	int pipe = crtc->pipe, plane = crtc->plane;
7103 	int fourcc, pixel_format;
7104 	int aligned_height;
7105 
7106 	crtc->base.primary->fb = kzalloc(sizeof(struct intel_framebuffer), GFP_KERNEL);
7107 	if (!crtc->base.primary->fb) {
7108 		DRM_DEBUG_KMS("failed to alloc fb\n");
7109 		return;
7110 	}
7111 
7112 	val = I915_READ(DSPCNTR(plane));
7113 
7114 	if (INTEL_INFO(dev)->gen >= 4)
7115 		if (val & DISPPLANE_TILED)
7116 			plane_config->tiled = true;
7117 
7118 	pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
7119 	fourcc = intel_format_to_fourcc(pixel_format);
7120 	crtc->base.primary->fb->pixel_format = fourcc;
7121 	crtc->base.primary->fb->bits_per_pixel =
7122 		drm_format_plane_cpp(fourcc, 0) * 8;
7123 
7124 	base = I915_READ(DSPSURF(plane)) & 0xfffff000;
7125 	if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
7126 		offset = I915_READ(DSPOFFSET(plane));
7127 	} else {
7128 		if (plane_config->tiled)
7129 			offset = I915_READ(DSPTILEOFF(plane));
7130 		else
7131 			offset = I915_READ(DSPLINOFF(plane));
7132 	}
7133 	plane_config->base = base;
7134 
7135 	val = I915_READ(PIPESRC(pipe));
7136 	crtc->base.primary->fb->width = ((val >> 16) & 0xfff) + 1;
7137 	crtc->base.primary->fb->height = ((val >> 0) & 0xfff) + 1;
7138 
7139 	val = I915_READ(DSPSTRIDE(pipe));
7140 	crtc->base.primary->fb->pitches[0] = val & 0xffffff80;
7141 
7142 	aligned_height = intel_align_height(dev, crtc->base.primary->fb->height,
7143 					    plane_config->tiled);
7144 
7145 	plane_config->size = ALIGN(crtc->base.primary->fb->pitches[0] *
7146 				   aligned_height, PAGE_SIZE);
7147 
7148 	DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
7149 		      pipe, plane, crtc->base.primary->fb->width,
7150 		      crtc->base.primary->fb->height,
7151 		      crtc->base.primary->fb->bits_per_pixel, base,
7152 		      crtc->base.primary->fb->pitches[0],
7153 		      plane_config->size);
7154 }
7155 
7156 static bool ironlake_get_pipe_config(struct intel_crtc *crtc,
7157 				     struct intel_crtc_config *pipe_config)
7158 {
7159 	struct drm_device *dev = crtc->base.dev;
7160 	struct drm_i915_private *dev_priv = dev->dev_private;
7161 	uint32_t tmp;
7162 
7163 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
7164 	pipe_config->shared_dpll = DPLL_ID_PRIVATE;
7165 
7166 	tmp = I915_READ(PIPECONF(crtc->pipe));
7167 	if (!(tmp & PIPECONF_ENABLE))
7168 		return false;
7169 
7170 	switch (tmp & PIPECONF_BPC_MASK) {
7171 	case PIPECONF_6BPC:
7172 		pipe_config->pipe_bpp = 18;
7173 		break;
7174 	case PIPECONF_8BPC:
7175 		pipe_config->pipe_bpp = 24;
7176 		break;
7177 	case PIPECONF_10BPC:
7178 		pipe_config->pipe_bpp = 30;
7179 		break;
7180 	case PIPECONF_12BPC:
7181 		pipe_config->pipe_bpp = 36;
7182 		break;
7183 	default:
7184 		break;
7185 	}
7186 
7187 	if (tmp & PIPECONF_COLOR_RANGE_SELECT)
7188 		pipe_config->limited_color_range = true;
7189 
7190 	if (I915_READ(PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) {
7191 		struct intel_shared_dpll *pll;
7192 
7193 		pipe_config->has_pch_encoder = true;
7194 
7195 		tmp = I915_READ(FDI_RX_CTL(crtc->pipe));
7196 		pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >>
7197 					  FDI_DP_PORT_WIDTH_SHIFT) + 1;
7198 
7199 		ironlake_get_fdi_m_n_config(crtc, pipe_config);
7200 
7201 		if (HAS_PCH_IBX(dev_priv->dev)) {
7202 			pipe_config->shared_dpll =
7203 				(enum intel_dpll_id) crtc->pipe;
7204 		} else {
7205 			tmp = I915_READ(PCH_DPLL_SEL);
7206 			if (tmp & TRANS_DPLLB_SEL(crtc->pipe))
7207 				pipe_config->shared_dpll = DPLL_ID_PCH_PLL_B;
7208 			else
7209 				pipe_config->shared_dpll = DPLL_ID_PCH_PLL_A;
7210 		}
7211 
7212 		pll = &dev_priv->shared_dplls[pipe_config->shared_dpll];
7213 
7214 		WARN_ON(!pll->get_hw_state(dev_priv, pll,
7215 					   &pipe_config->dpll_hw_state));
7216 
7217 		tmp = pipe_config->dpll_hw_state.dpll;
7218 		pipe_config->pixel_multiplier =
7219 			((tmp & PLL_REF_SDVO_HDMI_MULTIPLIER_MASK)
7220 			 >> PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT) + 1;
7221 
7222 		ironlake_pch_clock_get(crtc, pipe_config);
7223 	} else {
7224 		pipe_config->pixel_multiplier = 1;
7225 	}
7226 
7227 	intel_get_pipe_timings(crtc, pipe_config);
7228 
7229 	ironlake_get_pfit_config(crtc, pipe_config);
7230 
7231 	return true;
7232 }
7233 
7234 static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
7235 {
7236 	struct drm_device *dev = dev_priv->dev;
7237 	struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
7238 	struct intel_crtc *crtc;
7239 
7240 	for_each_intel_crtc(dev, crtc)
7241 		WARN(crtc->active, "CRTC for pipe %c enabled\n",
7242 		     pipe_name(crtc->pipe));
7243 
7244 	WARN(I915_READ(HSW_PWR_WELL_DRIVER), "Power well on\n");
7245 	WARN(plls->spll_refcount, "SPLL enabled\n");
7246 	WARN(plls->wrpll1_refcount, "WRPLL1 enabled\n");
7247 	WARN(plls->wrpll2_refcount, "WRPLL2 enabled\n");
7248 	WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
7249 	WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
7250 	     "CPU PWM1 enabled\n");
7251 	WARN(I915_READ(HSW_BLC_PWM2_CTL) & BLM_PWM_ENABLE,
7252 	     "CPU PWM2 enabled\n");
7253 	WARN(I915_READ(BLC_PWM_PCH_CTL1) & BLM_PCH_PWM_ENABLE,
7254 	     "PCH PWM1 enabled\n");
7255 	WARN(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
7256 	     "Utility pin enabled\n");
7257 	WARN(I915_READ(PCH_GTC_CTL) & PCH_GTC_ENABLE, "PCH GTC enabled\n");
7258 
7259 	/*
7260 	 * In theory we can still leave IRQs enabled, as long as only the HPD
7261 	 * interrupts remain enabled. We used to check for that, but since it's
7262 	 * gen-specific and since we only disable LCPLL after we fully disable
7263 	 * the interrupts, the check below should be enough.
7264 	 */
7265 	WARN(!dev_priv->pm.irqs_disabled, "IRQs enabled\n");
7266 }
7267 
7268 static void hsw_write_dcomp(struct drm_i915_private *dev_priv, uint32_t val)
7269 {
7270 	struct drm_device *dev = dev_priv->dev;
7271 
7272 	if (IS_HASWELL(dev)) {
7273 		mutex_lock(&dev_priv->rps.hw_lock);
7274 		if (sandybridge_pcode_write(dev_priv, GEN6_PCODE_WRITE_D_COMP,
7275 					    val))
7276 			DRM_ERROR("Failed to disable D_COMP\n");
7277 		mutex_unlock(&dev_priv->rps.hw_lock);
7278 	} else {
7279 		I915_WRITE(D_COMP, val);
7280 	}
7281 	POSTING_READ(D_COMP);
7282 }
7283 
7284 /*
7285  * This function implements pieces of two sequences from BSpec:
7286  * - Sequence for display software to disable LCPLL
7287  * - Sequence for display software to allow package C8+
7288  * The steps implemented here are just the steps that actually touch the LCPLL
7289  * register. Callers should take care of disabling all the display engine
7290  * functions, doing the mode unset, fixing interrupts, etc.
7291  */
7292 static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
7293 			      bool switch_to_fclk, bool allow_power_down)
7294 {
7295 	uint32_t val;
7296 
7297 	assert_can_disable_lcpll(dev_priv);
7298 
7299 	val = I915_READ(LCPLL_CTL);
7300 
7301 	if (switch_to_fclk) {
7302 		val |= LCPLL_CD_SOURCE_FCLK;
7303 		I915_WRITE(LCPLL_CTL, val);
7304 
7305 		if (wait_for_atomic_us(I915_READ(LCPLL_CTL) &
7306 				       LCPLL_CD_SOURCE_FCLK_DONE, 1))
7307 			DRM_ERROR("Switching to FCLK failed\n");
7308 
7309 		val = I915_READ(LCPLL_CTL);
7310 	}
7311 
7312 	val |= LCPLL_PLL_DISABLE;
7313 	I915_WRITE(LCPLL_CTL, val);
7314 	POSTING_READ(LCPLL_CTL);
7315 
7316 	if (wait_for((I915_READ(LCPLL_CTL) & LCPLL_PLL_LOCK) == 0, 1))
7317 		DRM_ERROR("LCPLL still locked\n");
7318 
7319 	val = I915_READ(D_COMP);
7320 	val |= D_COMP_COMP_DISABLE;
7321 	hsw_write_dcomp(dev_priv, val);
7322 	ndelay(100);
7323 
7324 	if (wait_for((I915_READ(D_COMP) & D_COMP_RCOMP_IN_PROGRESS) == 0, 1))
7325 		DRM_ERROR("D_COMP RCOMP still in progress\n");
7326 
7327 	if (allow_power_down) {
7328 		val = I915_READ(LCPLL_CTL);
7329 		val |= LCPLL_POWER_DOWN_ALLOW;
7330 		I915_WRITE(LCPLL_CTL, val);
7331 		POSTING_READ(LCPLL_CTL);
7332 	}
7333 }
7334 
7335 /*
7336  * Fully restores LCPLL, disallowing power down and switching back to LCPLL
7337  * source.
7338  */
7339 static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
7340 {
7341 	uint32_t val;
7342 
7343 	val = I915_READ(LCPLL_CTL);
7344 
7345 	if ((val & (LCPLL_PLL_LOCK | LCPLL_PLL_DISABLE | LCPLL_CD_SOURCE_FCLK |
7346 		    LCPLL_POWER_DOWN_ALLOW)) == LCPLL_PLL_LOCK)
7347 		return;
7348 
7349 	/*
7350 	 * Make sure we're not on PC8 state before disabling PC8, otherwise
7351 	 * we'll hang the machine. To prevent PC8 state, just enable force_wake.
7352 	 *
7353 	 * The other problem is that hsw_restore_lcpll() is called as part of
7354 	 * the runtime PM resume sequence, so we can't just call
7355 	 * gen6_gt_force_wake_get() because that function calls
7356 	 * intel_runtime_pm_get(), and we can't change the runtime PM refcount
7357 	 * while we are on the resume sequence. So to solve this problem we have
7358 	 * to call special forcewake code that doesn't touch runtime PM and
7359 	 * doesn't enable the forcewake delayed work.
7360 	 */
7361 	lockmgr(&dev_priv->uncore.lock, LK_EXCLUSIVE);
7362 	if (dev_priv->uncore.forcewake_count++ == 0)
7363 		dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL);
7364 	lockmgr(&dev_priv->uncore.lock, LK_RELEASE);
7365 
7366 	if (val & LCPLL_POWER_DOWN_ALLOW) {
7367 		val &= ~LCPLL_POWER_DOWN_ALLOW;
7368 		I915_WRITE(LCPLL_CTL, val);
7369 		POSTING_READ(LCPLL_CTL);
7370 	}
7371 
7372 	val = I915_READ(D_COMP);
7373 	val |= D_COMP_COMP_FORCE;
7374 	val &= ~D_COMP_COMP_DISABLE;
7375 	hsw_write_dcomp(dev_priv, val);
7376 
7377 	val = I915_READ(LCPLL_CTL);
7378 	val &= ~LCPLL_PLL_DISABLE;
7379 	I915_WRITE(LCPLL_CTL, val);
7380 
7381 	if (wait_for(I915_READ(LCPLL_CTL) & LCPLL_PLL_LOCK, 5))
7382 		DRM_ERROR("LCPLL not locked yet\n");
7383 
7384 	if (val & LCPLL_CD_SOURCE_FCLK) {
7385 		val = I915_READ(LCPLL_CTL);
7386 		val &= ~LCPLL_CD_SOURCE_FCLK;
7387 		I915_WRITE(LCPLL_CTL, val);
7388 
7389 		if (wait_for_atomic_us((I915_READ(LCPLL_CTL) &
7390 					LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
7391 			DRM_ERROR("Switching back to LCPLL failed\n");
7392 	}
7393 
7394 	/* See the big comment above. */
7395 	lockmgr(&dev_priv->uncore.lock, LK_EXCLUSIVE);
7396 	if (--dev_priv->uncore.forcewake_count == 0)
7397 		dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL);
7398 	lockmgr(&dev_priv->uncore.lock, LK_RELEASE);
7399 }
7400 
7401 /*
7402  * Package states C8 and deeper are really deep PC states that can only be
7403  * reached when all the devices on the system allow it, so even if the graphics
7404  * device allows PC8+, it doesn't mean the system will actually get to these
7405  * states. Our driver only allows PC8+ when going into runtime PM.
7406  *
7407  * The requirements for PC8+ are that all the outputs are disabled, the power
7408  * well is disabled and most interrupts are disabled, and these are also
7409  * requirements for runtime PM. When these conditions are met, we manually do
7410  * the other conditions: disable the interrupts, clocks and switch LCPLL refclk
7411  * to Fclk. If we're in PC8+ and we get an non-hotplug interrupt, we can hard
7412  * hang the machine.
7413  *
7414  * When we really reach PC8 or deeper states (not just when we allow it) we lose
7415  * the state of some registers, so when we come back from PC8+ we need to
7416  * restore this state. We don't get into PC8+ if we're not in RC6, so we don't
7417  * need to take care of the registers kept by RC6. Notice that this happens even
7418  * if we don't put the device in PCI D3 state (which is what currently happens
7419  * because of the runtime PM support).
7420  *
7421  * For more, read "Display Sequences for Package C8" on the hardware
7422  * documentation.
7423  */
7424 void hsw_enable_pc8(struct drm_i915_private *dev_priv)
7425 {
7426 	struct drm_device *dev = dev_priv->dev;
7427 	uint32_t val;
7428 
7429 	DRM_DEBUG_KMS("Enabling package C8+\n");
7430 
7431 	if (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
7432 		val = I915_READ(SOUTH_DSPCLK_GATE_D);
7433 		val &= ~PCH_LP_PARTITION_LEVEL_DISABLE;
7434 		I915_WRITE(SOUTH_DSPCLK_GATE_D, val);
7435 	}
7436 
7437 	lpt_disable_clkout_dp(dev);
7438 	hsw_disable_lcpll(dev_priv, true, true);
7439 }
7440 
7441 void hsw_disable_pc8(struct drm_i915_private *dev_priv)
7442 {
7443 	struct drm_device *dev = dev_priv->dev;
7444 	uint32_t val;
7445 
7446 	DRM_DEBUG_KMS("Disabling package C8+\n");
7447 
7448 	hsw_restore_lcpll(dev_priv);
7449 	lpt_init_pch_refclk(dev);
7450 
7451 	if (dev_priv->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
7452 		val = I915_READ(SOUTH_DSPCLK_GATE_D);
7453 		val |= PCH_LP_PARTITION_LEVEL_DISABLE;
7454 		I915_WRITE(SOUTH_DSPCLK_GATE_D, val);
7455 	}
7456 
7457 	intel_prepare_ddi(dev);
7458 }
7459 
7460 static void snb_modeset_global_resources(struct drm_device *dev)
7461 {
7462 	modeset_update_crtc_power_domains(dev);
7463 }
7464 
7465 static void haswell_modeset_global_resources(struct drm_device *dev)
7466 {
7467 	modeset_update_crtc_power_domains(dev);
7468 }
7469 
7470 static int haswell_crtc_mode_set(struct drm_crtc *crtc,
7471 				 int x, int y,
7472 				 struct drm_framebuffer *fb)
7473 {
7474 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7475 
7476 	if (!intel_ddi_pll_select(intel_crtc))
7477 		return -EINVAL;
7478 	intel_ddi_pll_enable(intel_crtc);
7479 
7480 	intel_crtc->lowfreq_avail = false;
7481 
7482 	return 0;
7483 }
7484 
7485 static bool haswell_get_pipe_config(struct intel_crtc *crtc,
7486 				    struct intel_crtc_config *pipe_config)
7487 {
7488 	struct drm_device *dev = crtc->base.dev;
7489 	struct drm_i915_private *dev_priv = dev->dev_private;
7490 	enum intel_display_power_domain pfit_domain;
7491 	uint32_t tmp;
7492 
7493 	if (!intel_display_power_enabled(dev_priv,
7494 					 POWER_DOMAIN_PIPE(crtc->pipe)))
7495 		return false;
7496 
7497 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
7498 	pipe_config->shared_dpll = DPLL_ID_PRIVATE;
7499 
7500 	tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
7501 	if (tmp & TRANS_DDI_FUNC_ENABLE) {
7502 		enum i915_pipe trans_edp_pipe;
7503 		switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
7504 		default:
7505 			WARN(1, "unknown pipe linked to edp transcoder\n");
7506 		case TRANS_DDI_EDP_INPUT_A_ONOFF:
7507 		case TRANS_DDI_EDP_INPUT_A_ON:
7508 			trans_edp_pipe = PIPE_A;
7509 			break;
7510 		case TRANS_DDI_EDP_INPUT_B_ONOFF:
7511 			trans_edp_pipe = PIPE_B;
7512 			break;
7513 		case TRANS_DDI_EDP_INPUT_C_ONOFF:
7514 			trans_edp_pipe = PIPE_C;
7515 			break;
7516 		}
7517 
7518 		if (trans_edp_pipe == crtc->pipe)
7519 			pipe_config->cpu_transcoder = TRANSCODER_EDP;
7520 	}
7521 
7522 	if (!intel_display_power_enabled(dev_priv,
7523 			POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder)))
7524 		return false;
7525 
7526 	tmp = I915_READ(PIPECONF(pipe_config->cpu_transcoder));
7527 	if (!(tmp & PIPECONF_ENABLE))
7528 		return false;
7529 
7530 	/*
7531 	 * Haswell has only FDI/PCH transcoder A. It is which is connected to
7532 	 * DDI E. So just check whether this pipe is wired to DDI E and whether
7533 	 * the PCH transcoder is on.
7534 	 */
7535 	tmp = I915_READ(TRANS_DDI_FUNC_CTL(pipe_config->cpu_transcoder));
7536 	if ((tmp & TRANS_DDI_PORT_MASK) == TRANS_DDI_SELECT_PORT(PORT_E) &&
7537 	    I915_READ(LPT_TRANSCONF) & TRANS_ENABLE) {
7538 		pipe_config->has_pch_encoder = true;
7539 
7540 		tmp = I915_READ(FDI_RX_CTL(PIPE_A));
7541 		pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >>
7542 					  FDI_DP_PORT_WIDTH_SHIFT) + 1;
7543 
7544 		ironlake_get_fdi_m_n_config(crtc, pipe_config);
7545 	}
7546 
7547 	intel_get_pipe_timings(crtc, pipe_config);
7548 
7549 	pfit_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe);
7550 	if (intel_display_power_enabled(dev_priv, pfit_domain))
7551 		ironlake_get_pfit_config(crtc, pipe_config);
7552 
7553 	if (IS_HASWELL(dev))
7554 		pipe_config->ips_enabled = hsw_crtc_supports_ips(crtc) &&
7555 			(I915_READ(IPS_CTL) & IPS_ENABLE);
7556 
7557 	pipe_config->pixel_multiplier = 1;
7558 
7559 	return true;
7560 }
7561 
7562 static struct {
7563 	int clock;
7564 	u32 config;
7565 } hdmi_audio_clock[] = {
7566 	{ DIV_ROUND_UP(25200 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 },
7567 	{ 25200, AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 }, /* default per bspec */
7568 	{ 27000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 },
7569 	{ 27000 * 1001 / 1000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 },
7570 	{ 54000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 },
7571 	{ 54000 * 1001 / 1000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 },
7572 	{ DIV_ROUND_UP(74250 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 },
7573 	{ 74250, AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 },
7574 	{ DIV_ROUND_UP(148500 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 },
7575 	{ 148500, AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 },
7576 };
7577 
7578 /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
7579 static u32 audio_config_hdmi_pixel_clock(struct drm_display_mode *mode)
7580 {
7581 	int i;
7582 
7583 	for (i = 0; i < ARRAY_SIZE(hdmi_audio_clock); i++) {
7584 		if (mode->clock == hdmi_audio_clock[i].clock)
7585 			break;
7586 	}
7587 
7588 	if (i == ARRAY_SIZE(hdmi_audio_clock)) {
7589 		DRM_DEBUG_KMS("HDMI audio pixel clock setting for %d not found, falling back to defaults\n", mode->clock);
7590 		i = 1;
7591 	}
7592 
7593 	DRM_DEBUG_KMS("Configuring HDMI audio for pixel clock %d (0x%08x)\n",
7594 		      hdmi_audio_clock[i].clock,
7595 		      hdmi_audio_clock[i].config);
7596 
7597 	return hdmi_audio_clock[i].config;
7598 }
7599 
7600 static bool intel_eld_uptodate(struct drm_connector *connector,
7601 			       int reg_eldv, uint32_t bits_eldv,
7602 			       int reg_elda, uint32_t bits_elda,
7603 			       int reg_edid)
7604 {
7605 	struct drm_i915_private *dev_priv = connector->dev->dev_private;
7606 	uint8_t *eld = connector->eld;
7607 	uint32_t i;
7608 
7609 	i = I915_READ(reg_eldv);
7610 	i &= bits_eldv;
7611 
7612 	if (!eld[0])
7613 		return !i;
7614 
7615 	if (!i)
7616 		return false;
7617 
7618 	i = I915_READ(reg_elda);
7619 	i &= ~bits_elda;
7620 	I915_WRITE(reg_elda, i);
7621 
7622 	for (i = 0; i < eld[2]; i++)
7623 		if (I915_READ(reg_edid) != *((uint32_t *)eld + i))
7624 			return false;
7625 
7626 	return true;
7627 }
7628 
7629 static void g4x_write_eld(struct drm_connector *connector,
7630 			  struct drm_crtc *crtc,
7631 			  struct drm_display_mode *mode)
7632 {
7633 	struct drm_i915_private *dev_priv = connector->dev->dev_private;
7634 	uint8_t *eld = connector->eld;
7635 	uint32_t eldv;
7636 	uint32_t len;
7637 	uint32_t i;
7638 
7639 	i = I915_READ(G4X_AUD_VID_DID);
7640 
7641 	if (i == INTEL_AUDIO_DEVBLC || i == INTEL_AUDIO_DEVCL)
7642 		eldv = G4X_ELDV_DEVCL_DEVBLC;
7643 	else
7644 		eldv = G4X_ELDV_DEVCTG;
7645 
7646 	if (intel_eld_uptodate(connector,
7647 			       G4X_AUD_CNTL_ST, eldv,
7648 			       G4X_AUD_CNTL_ST, G4X_ELD_ADDR,
7649 			       G4X_HDMIW_HDMIEDID))
7650 		return;
7651 
7652 	i = I915_READ(G4X_AUD_CNTL_ST);
7653 	i &= ~(eldv | G4X_ELD_ADDR);
7654 	len = (i >> 9) & 0x1f;		/* ELD buffer size */
7655 	I915_WRITE(G4X_AUD_CNTL_ST, i);
7656 
7657 	if (!eld[0])
7658 		return;
7659 
7660 	len = min_t(uint8_t, eld[2], len);
7661 	DRM_DEBUG_DRIVER("ELD size %d\n", len);
7662 	for (i = 0; i < len; i++)
7663 		I915_WRITE(G4X_HDMIW_HDMIEDID, *((uint32_t *)eld + i));
7664 
7665 	i = I915_READ(G4X_AUD_CNTL_ST);
7666 	i |= eldv;
7667 	I915_WRITE(G4X_AUD_CNTL_ST, i);
7668 }
7669 
7670 static void haswell_write_eld(struct drm_connector *connector,
7671 			      struct drm_crtc *crtc,
7672 			      struct drm_display_mode *mode)
7673 {
7674 	struct drm_i915_private *dev_priv = connector->dev->dev_private;
7675 	uint8_t *eld = connector->eld;
7676 	uint32_t eldv;
7677 	uint32_t i;
7678 	int len;
7679 	int pipe = to_intel_crtc(crtc)->pipe;
7680 	int tmp;
7681 
7682 	int hdmiw_hdmiedid = HSW_AUD_EDID_DATA(pipe);
7683 	int aud_cntl_st = HSW_AUD_DIP_ELD_CTRL(pipe);
7684 	int aud_config = HSW_AUD_CFG(pipe);
7685 	int aud_cntrl_st2 = HSW_AUD_PIN_ELD_CP_VLD;
7686 
7687 	/* Audio output enable */
7688 	DRM_DEBUG_DRIVER("HDMI audio: enable codec\n");
7689 	tmp = I915_READ(aud_cntrl_st2);
7690 	tmp |= (AUDIO_OUTPUT_ENABLE_A << (pipe * 4));
7691 	I915_WRITE(aud_cntrl_st2, tmp);
7692 	POSTING_READ(aud_cntrl_st2);
7693 
7694 	assert_pipe_disabled(dev_priv, to_intel_crtc(crtc)->pipe);
7695 
7696 	/* Set ELD valid state */
7697 	tmp = I915_READ(aud_cntrl_st2);
7698 	DRM_DEBUG_DRIVER("HDMI audio: pin eld vld status=0x%08x\n", tmp);
7699 	tmp |= (AUDIO_ELD_VALID_A << (pipe * 4));
7700 	I915_WRITE(aud_cntrl_st2, tmp);
7701 	tmp = I915_READ(aud_cntrl_st2);
7702 	DRM_DEBUG_DRIVER("HDMI audio: eld vld status=0x%08x\n", tmp);
7703 
7704 	/* Enable HDMI mode */
7705 	tmp = I915_READ(aud_config);
7706 	DRM_DEBUG_DRIVER("HDMI audio: audio conf: 0x%08x\n", tmp);
7707 	/* clear N_programing_enable and N_value_index */
7708 	tmp &= ~(AUD_CONFIG_N_VALUE_INDEX | AUD_CONFIG_N_PROG_ENABLE);
7709 	I915_WRITE(aud_config, tmp);
7710 
7711 	DRM_DEBUG_DRIVER("ELD on pipe %c\n", pipe_name(pipe));
7712 
7713 	eldv = AUDIO_ELD_VALID_A << (pipe * 4);
7714 
7715 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) {
7716 		DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n");
7717 		eld[5] |= (1 << 2);	/* Conn_Type, 0x1 = DisplayPort */
7718 		I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */
7719 	} else {
7720 		I915_WRITE(aud_config, audio_config_hdmi_pixel_clock(mode));
7721 	}
7722 
7723 	if (intel_eld_uptodate(connector,
7724 			       aud_cntrl_st2, eldv,
7725 			       aud_cntl_st, IBX_ELD_ADDRESS,
7726 			       hdmiw_hdmiedid))
7727 		return;
7728 
7729 	i = I915_READ(aud_cntrl_st2);
7730 	i &= ~eldv;
7731 	I915_WRITE(aud_cntrl_st2, i);
7732 
7733 	if (!eld[0])
7734 		return;
7735 
7736 	i = I915_READ(aud_cntl_st);
7737 	i &= ~IBX_ELD_ADDRESS;
7738 	I915_WRITE(aud_cntl_st, i);
7739 	i = (i >> 29) & DIP_PORT_SEL_MASK;		/* DIP_Port_Select, 0x1 = PortB */
7740 	DRM_DEBUG_DRIVER("port num:%d\n", i);
7741 
7742 	len = min_t(uint8_t, eld[2], 21);	/* 84 bytes of hw ELD buffer */
7743 	DRM_DEBUG_DRIVER("ELD size %d\n", len);
7744 	for (i = 0; i < len; i++)
7745 		I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));
7746 
7747 	i = I915_READ(aud_cntrl_st2);
7748 	i |= eldv;
7749 	I915_WRITE(aud_cntrl_st2, i);
7750 
7751 }
7752 
7753 static void ironlake_write_eld(struct drm_connector *connector,
7754 			       struct drm_crtc *crtc,
7755 			       struct drm_display_mode *mode)
7756 {
7757 	struct drm_i915_private *dev_priv = connector->dev->dev_private;
7758 	uint8_t *eld = connector->eld;
7759 	uint32_t eldv;
7760 	uint32_t i;
7761 	int len;
7762 	int hdmiw_hdmiedid;
7763 	int aud_config;
7764 	int aud_cntl_st;
7765 	int aud_cntrl_st2;
7766 	int pipe = to_intel_crtc(crtc)->pipe;
7767 
7768 	if (HAS_PCH_IBX(connector->dev)) {
7769 		hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID(pipe);
7770 		aud_config = IBX_AUD_CFG(pipe);
7771 		aud_cntl_st = IBX_AUD_CNTL_ST(pipe);
7772 		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
7773 	} else if (IS_VALLEYVIEW(connector->dev)) {
7774 		hdmiw_hdmiedid = VLV_HDMIW_HDMIEDID(pipe);
7775 		aud_config = VLV_AUD_CFG(pipe);
7776 		aud_cntl_st = VLV_AUD_CNTL_ST(pipe);
7777 		aud_cntrl_st2 = VLV_AUD_CNTL_ST2;
7778 	} else {
7779 		hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID(pipe);
7780 		aud_config = CPT_AUD_CFG(pipe);
7781 		aud_cntl_st = CPT_AUD_CNTL_ST(pipe);
7782 		aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
7783 	}
7784 
7785 	DRM_DEBUG_DRIVER("ELD on pipe %c\n", pipe_name(pipe));
7786 
7787 	if (IS_VALLEYVIEW(connector->dev))  {
7788 		struct intel_encoder *intel_encoder;
7789 		struct intel_digital_port *intel_dig_port;
7790 
7791 		intel_encoder = intel_attached_encoder(connector);
7792 		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
7793 		i = intel_dig_port->port;
7794 	} else {
7795 		i = I915_READ(aud_cntl_st);
7796 		i = (i >> 29) & DIP_PORT_SEL_MASK;
7797 		/* DIP_Port_Select, 0x1 = PortB */
7798 	}
7799 
7800 	if (!i) {
7801 		DRM_DEBUG_DRIVER("Audio directed to unknown port\n");
7802 		/* operate blindly on all ports */
7803 		eldv = IBX_ELD_VALIDB;
7804 		eldv |= IBX_ELD_VALIDB << 4;
7805 		eldv |= IBX_ELD_VALIDB << 8;
7806 	} else {
7807 		DRM_DEBUG_DRIVER("ELD on port %c\n", port_name(i));
7808 		eldv = IBX_ELD_VALIDB << ((i - 1) * 4);
7809 	}
7810 
7811 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) {
7812 		DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n");
7813 		eld[5] |= (1 << 2);	/* Conn_Type, 0x1 = DisplayPort */
7814 		I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */
7815 	} else {
7816 		I915_WRITE(aud_config, audio_config_hdmi_pixel_clock(mode));
7817 	}
7818 
7819 	if (intel_eld_uptodate(connector,
7820 			       aud_cntrl_st2, eldv,
7821 			       aud_cntl_st, IBX_ELD_ADDRESS,
7822 			       hdmiw_hdmiedid))
7823 		return;
7824 
7825 	i = I915_READ(aud_cntrl_st2);
7826 	i &= ~eldv;
7827 	I915_WRITE(aud_cntrl_st2, i);
7828 
7829 	if (!eld[0])
7830 		return;
7831 
7832 	i = I915_READ(aud_cntl_st);
7833 	i &= ~IBX_ELD_ADDRESS;
7834 	I915_WRITE(aud_cntl_st, i);
7835 
7836 	len = min_t(uint8_t, eld[2], 21);	/* 84 bytes of hw ELD buffer */
7837 	DRM_DEBUG_DRIVER("ELD size %d\n", len);
7838 	for (i = 0; i < len; i++)
7839 		I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));
7840 
7841 	i = I915_READ(aud_cntrl_st2);
7842 	i |= eldv;
7843 	I915_WRITE(aud_cntrl_st2, i);
7844 }
7845 
7846 void intel_write_eld(struct drm_encoder *encoder,
7847 		     struct drm_display_mode *mode)
7848 {
7849 	struct drm_crtc *crtc = encoder->crtc;
7850 	struct drm_connector *connector;
7851 	struct drm_device *dev = encoder->dev;
7852 	struct drm_i915_private *dev_priv = dev->dev_private;
7853 
7854 	connector = drm_select_eld(encoder, mode);
7855 	if (!connector)
7856 		return;
7857 
7858 	DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
7859 			 connector->base.id,
7860 			 connector->name,
7861 			 connector->encoder->base.id,
7862 			 connector->encoder->name);
7863 
7864 	connector->eld[6] = drm_av_sync_delay(connector, mode) / 2;
7865 
7866 	if (dev_priv->display.write_eld)
7867 		dev_priv->display.write_eld(connector, crtc, mode);
7868 }
7869 
7870 static void i845_update_cursor(struct drm_crtc *crtc, u32 base)
7871 {
7872 	struct drm_device *dev = crtc->dev;
7873 	struct drm_i915_private *dev_priv = dev->dev_private;
7874 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7875 	uint32_t cntl;
7876 
7877 	if (base != intel_crtc->cursor_base) {
7878 		/* On these chipsets we can only modify the base whilst
7879 		 * the cursor is disabled.
7880 		 */
7881 		if (intel_crtc->cursor_cntl) {
7882 			I915_WRITE(_CURACNTR, 0);
7883 			POSTING_READ(_CURACNTR);
7884 			intel_crtc->cursor_cntl = 0;
7885 		}
7886 
7887 		I915_WRITE(_CURABASE, base);
7888 		POSTING_READ(_CURABASE);
7889 	}
7890 
7891 	/* XXX width must be 64, stride 256 => 0x00 << 28 */
7892 	cntl = 0;
7893 	if (base)
7894 		cntl = (CURSOR_ENABLE |
7895 			CURSOR_GAMMA_ENABLE |
7896 			CURSOR_FORMAT_ARGB);
7897 	if (intel_crtc->cursor_cntl != cntl) {
7898 		I915_WRITE(_CURACNTR, cntl);
7899 		POSTING_READ(_CURACNTR);
7900 		intel_crtc->cursor_cntl = cntl;
7901 	}
7902 }
7903 
7904 static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base)
7905 {
7906 	struct drm_device *dev = crtc->dev;
7907 	struct drm_i915_private *dev_priv = dev->dev_private;
7908 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7909 	int pipe = intel_crtc->pipe;
7910 	uint32_t cntl;
7911 
7912 	cntl = 0;
7913 	if (base) {
7914 		cntl = MCURSOR_GAMMA_ENABLE;
7915 		switch (intel_crtc->cursor_width) {
7916 			case 64:
7917 				cntl |= CURSOR_MODE_64_ARGB_AX;
7918 				break;
7919 			case 128:
7920 				cntl |= CURSOR_MODE_128_ARGB_AX;
7921 				break;
7922 			case 256:
7923 				cntl |= CURSOR_MODE_256_ARGB_AX;
7924 				break;
7925 			default:
7926 				WARN_ON(1);
7927 				return;
7928 		}
7929 		cntl |= pipe << 28; /* Connect to correct pipe */
7930 	}
7931 	if (intel_crtc->cursor_cntl != cntl) {
7932 		I915_WRITE(CURCNTR(pipe), cntl);
7933 		POSTING_READ(CURCNTR(pipe));
7934 		intel_crtc->cursor_cntl = cntl;
7935 	}
7936 
7937 	/* and commit changes on next vblank */
7938 	I915_WRITE(CURBASE(pipe), base);
7939 	POSTING_READ(CURBASE(pipe));
7940 }
7941 
7942 static void ivb_update_cursor(struct drm_crtc *crtc, u32 base)
7943 {
7944 	struct drm_device *dev = crtc->dev;
7945 	struct drm_i915_private *dev_priv = dev->dev_private;
7946 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7947 	int pipe = intel_crtc->pipe;
7948 	uint32_t cntl;
7949 
7950 	cntl = 0;
7951 	if (base) {
7952 		cntl = MCURSOR_GAMMA_ENABLE;
7953 		switch (intel_crtc->cursor_width) {
7954 			case 64:
7955 				cntl |= CURSOR_MODE_64_ARGB_AX;
7956 				break;
7957 			case 128:
7958 				cntl |= CURSOR_MODE_128_ARGB_AX;
7959 				break;
7960 			case 256:
7961 				cntl |= CURSOR_MODE_256_ARGB_AX;
7962 				break;
7963 			default:
7964 				WARN_ON(1);
7965 				return;
7966 		}
7967 	}
7968 	if (IS_HASWELL(dev) || IS_BROADWELL(dev))
7969 		cntl |= CURSOR_PIPE_CSC_ENABLE;
7970 
7971 	if (intel_crtc->cursor_cntl != cntl) {
7972 		I915_WRITE(CURCNTR(pipe), cntl);
7973 		POSTING_READ(CURCNTR(pipe));
7974 		intel_crtc->cursor_cntl = cntl;
7975 	}
7976 
7977 	/* and commit changes on next vblank */
7978 	I915_WRITE(CURBASE(pipe), base);
7979 	POSTING_READ(CURBASE(pipe));
7980 }
7981 
7982 /* If no-part of the cursor is visible on the framebuffer, then the GPU may hang... */
7983 static void intel_crtc_update_cursor(struct drm_crtc *crtc,
7984 				     bool on)
7985 {
7986 	struct drm_device *dev = crtc->dev;
7987 	struct drm_i915_private *dev_priv = dev->dev_private;
7988 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7989 	int pipe = intel_crtc->pipe;
7990 	int x = intel_crtc->cursor_x;
7991 	int y = intel_crtc->cursor_y;
7992 	u32 base = 0, pos = 0;
7993 
7994 	if (on)
7995 		base = intel_crtc->cursor_addr;
7996 
7997 	if (x >= intel_crtc->config.pipe_src_w)
7998 		base = 0;
7999 
8000 	if (y >= intel_crtc->config.pipe_src_h)
8001 		base = 0;
8002 
8003 	if (x < 0) {
8004 		if (x + intel_crtc->cursor_width <= 0)
8005 			base = 0;
8006 
8007 		pos |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
8008 		x = -x;
8009 	}
8010 	pos |= x << CURSOR_X_SHIFT;
8011 
8012 	if (y < 0) {
8013 		if (y + intel_crtc->cursor_height <= 0)
8014 			base = 0;
8015 
8016 		pos |= CURSOR_POS_SIGN << CURSOR_Y_SHIFT;
8017 		y = -y;
8018 	}
8019 	pos |= y << CURSOR_Y_SHIFT;
8020 
8021 	if (base == 0 && intel_crtc->cursor_base == 0)
8022 		return;
8023 
8024 	I915_WRITE(CURPOS(pipe), pos);
8025 
8026 	if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev) || IS_BROADWELL(dev))
8027 		ivb_update_cursor(crtc, base);
8028 	else if (IS_845G(dev) || IS_I865G(dev))
8029 		i845_update_cursor(crtc, base);
8030 	else
8031 		i9xx_update_cursor(crtc, base);
8032 	intel_crtc->cursor_base = base;
8033 }
8034 
8035 static int intel_crtc_cursor_set(struct drm_crtc *crtc,
8036 				 struct drm_file *file,
8037 				 uint32_t handle,
8038 				 uint32_t width, uint32_t height)
8039 {
8040 	struct drm_device *dev = crtc->dev;
8041 	struct drm_i915_private *dev_priv = dev->dev_private;
8042 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8043 	struct drm_i915_gem_object *obj;
8044 	unsigned old_width;
8045 	uint32_t addr;
8046 	int ret;
8047 
8048 	/* if we want to turn off the cursor ignore width and height */
8049 	if (!handle) {
8050 		DRM_DEBUG_KMS("cursor off\n");
8051 		addr = 0;
8052 		obj = NULL;
8053 		mutex_lock(&dev->struct_mutex);
8054 		goto finish;
8055 	}
8056 
8057 	/* Check for which cursor types we support */
8058 	if (!((width == 64 && height == 64) ||
8059 			(width == 128 && height == 128 && !IS_GEN2(dev)) ||
8060 			(width == 256 && height == 256 && !IS_GEN2(dev)))) {
8061 		DRM_DEBUG("Cursor dimension not supported\n");
8062 		return -EINVAL;
8063 	}
8064 
8065 	obj = to_intel_bo(drm_gem_object_lookup(dev, file, handle));
8066 	if (&obj->base == NULL)
8067 		return -ENOENT;
8068 
8069 	if (obj->base.size < width * height * 4) {
8070 		DRM_DEBUG_KMS("buffer is to small\n");
8071 		ret = -ENOMEM;
8072 		goto fail;
8073 	}
8074 
8075 	/* we only need to pin inside GTT if cursor is non-phy */
8076 	mutex_lock(&dev->struct_mutex);
8077 	if (!INTEL_INFO(dev)->cursor_needs_physical) {
8078 		unsigned alignment;
8079 
8080 		if (obj->tiling_mode) {
8081 			DRM_DEBUG_KMS("cursor cannot be tiled\n");
8082 			ret = -EINVAL;
8083 			goto fail_locked;
8084 		}
8085 
8086 		/* Note that the w/a also requires 2 PTE of padding following
8087 		 * the bo. We currently fill all unused PTE with the shadow
8088 		 * page and so we should always have valid PTE following the
8089 		 * cursor preventing the VT-d warning.
8090 		 */
8091 		alignment = 0;
8092 		if (need_vtd_wa(dev))
8093 			alignment = 64*1024;
8094 
8095 		ret = i915_gem_object_pin_to_display_plane(obj, alignment, NULL);
8096 		if (ret) {
8097 			DRM_DEBUG_KMS("failed to move cursor bo into the GTT\n");
8098 			goto fail_locked;
8099 		}
8100 
8101 		ret = i915_gem_object_put_fence(obj);
8102 		if (ret) {
8103 			DRM_DEBUG_KMS("failed to release fence for cursor");
8104 			goto fail_unpin;
8105 		}
8106 
8107 		addr = i915_gem_obj_ggtt_offset(obj);
8108 	} else {
8109 		int align = IS_I830(dev) ? 16 * 1024 : 256;
8110 		ret = i915_gem_object_attach_phys(obj, align);
8111 		if (ret) {
8112 			DRM_DEBUG_KMS("failed to attach phys object\n");
8113 			goto fail_locked;
8114 		}
8115 		addr = obj->phys_handle->busaddr;
8116 	}
8117 
8118 	if (IS_GEN2(dev))
8119 		I915_WRITE(CURSIZE, (height << 12) | width);
8120 
8121  finish:
8122 	if (intel_crtc->cursor_bo) {
8123 		if (!INTEL_INFO(dev)->cursor_needs_physical)
8124 			i915_gem_object_unpin_from_display_plane(intel_crtc->cursor_bo);
8125 		drm_gem_object_unreference(&intel_crtc->cursor_bo->base);
8126 	}
8127 
8128 	mutex_unlock(&dev->struct_mutex);
8129 
8130 	old_width = intel_crtc->cursor_width;
8131 
8132 	intel_crtc->cursor_addr = addr;
8133 	intel_crtc->cursor_bo = obj;
8134 	intel_crtc->cursor_width = width;
8135 	intel_crtc->cursor_height = height;
8136 
8137 	if (intel_crtc->active) {
8138 		if (old_width != width)
8139 			intel_update_watermarks(crtc);
8140 		intel_crtc_update_cursor(crtc, intel_crtc->cursor_bo != NULL);
8141 	}
8142 
8143 	return 0;
8144 fail_unpin:
8145 	i915_gem_object_unpin_from_display_plane(obj);
8146 fail_locked:
8147 	mutex_unlock(&dev->struct_mutex);
8148 fail:
8149 	drm_gem_object_unreference_unlocked(&obj->base);
8150 	return ret;
8151 }
8152 
8153 static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
8154 {
8155 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8156 
8157 	intel_crtc->cursor_x = clamp_t(int, x, SHRT_MIN, SHRT_MAX);
8158 	intel_crtc->cursor_y = clamp_t(int, y, SHRT_MIN, SHRT_MAX);
8159 
8160 	if (intel_crtc->active)
8161 		intel_crtc_update_cursor(crtc, intel_crtc->cursor_bo != NULL);
8162 
8163 	return 0;
8164 }
8165 
8166 static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
8167 				 u16 *blue, uint32_t start, uint32_t size)
8168 {
8169 	int end = (start + size > 256) ? 256 : start + size, i;
8170 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8171 
8172 	for (i = start; i < end; i++) {
8173 		intel_crtc->lut_r[i] = red[i] >> 8;
8174 		intel_crtc->lut_g[i] = green[i] >> 8;
8175 		intel_crtc->lut_b[i] = blue[i] >> 8;
8176 	}
8177 
8178 	intel_crtc_load_lut(crtc);
8179 }
8180 
8181 /* VESA 640x480x72Hz mode to set on the pipe */
8182 static struct drm_display_mode load_detect_mode = {
8183 	DRM_MODE("640x480", DRM_MODE_TYPE_DEFAULT, 31500, 640, 664,
8184 		 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
8185 };
8186 
8187 struct drm_framebuffer *
8188 __intel_framebuffer_create(struct drm_device *dev,
8189 			   struct drm_mode_fb_cmd2 *mode_cmd,
8190 			   struct drm_i915_gem_object *obj)
8191 {
8192 	struct intel_framebuffer *intel_fb;
8193 	int ret;
8194 
8195 	intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
8196 	if (!intel_fb) {
8197 		drm_gem_object_unreference_unlocked(&obj->base);
8198 		return ERR_PTR(-ENOMEM);
8199 	}
8200 
8201 	ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj);
8202 	if (ret)
8203 		goto err;
8204 
8205 	return &intel_fb->base;
8206 err:
8207 	drm_gem_object_unreference_unlocked(&obj->base);
8208 	kfree(intel_fb);
8209 
8210 	return ERR_PTR(ret);
8211 }
8212 
8213 static struct drm_framebuffer *
8214 intel_framebuffer_create(struct drm_device *dev,
8215 			 struct drm_mode_fb_cmd2 *mode_cmd,
8216 			 struct drm_i915_gem_object *obj)
8217 {
8218 	struct drm_framebuffer *fb;
8219 	int ret;
8220 
8221 	ret = i915_mutex_lock_interruptible(dev);
8222 	if (ret)
8223 		return ERR_PTR(ret);
8224 	fb = __intel_framebuffer_create(dev, mode_cmd, obj);
8225 	mutex_unlock(&dev->struct_mutex);
8226 
8227 	return fb;
8228 }
8229 
8230 static u32
8231 intel_framebuffer_pitch_for_width(int width, int bpp)
8232 {
8233 	u32 pitch = DIV_ROUND_UP(width * bpp, 8);
8234 	return ALIGN(pitch, 64);
8235 }
8236 
8237 static u32
8238 intel_framebuffer_size_for_mode(struct drm_display_mode *mode, int bpp)
8239 {
8240 	u32 pitch = intel_framebuffer_pitch_for_width(mode->hdisplay, bpp);
8241 	return ALIGN(pitch * mode->vdisplay, PAGE_SIZE);
8242 }
8243 
8244 static struct drm_framebuffer *
8245 intel_framebuffer_create_for_mode(struct drm_device *dev,
8246 				  struct drm_display_mode *mode,
8247 				  int depth, int bpp)
8248 {
8249 	struct drm_i915_gem_object *obj;
8250 	struct drm_mode_fb_cmd2 mode_cmd = { 0 };
8251 
8252 	obj = i915_gem_alloc_object(dev,
8253 				    intel_framebuffer_size_for_mode(mode, bpp));
8254 	if (obj == NULL)
8255 		return ERR_PTR(-ENOMEM);
8256 
8257 	mode_cmd.width = mode->hdisplay;
8258 	mode_cmd.height = mode->vdisplay;
8259 	mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width,
8260 								bpp);
8261 	mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
8262 
8263 	return intel_framebuffer_create(dev, &mode_cmd, obj);
8264 }
8265 
8266 static struct drm_framebuffer *
8267 mode_fits_in_fbdev(struct drm_device *dev,
8268 		   struct drm_display_mode *mode)
8269 {
8270 #ifdef CONFIG_DRM_I915_FBDEV
8271 	struct drm_i915_private *dev_priv = dev->dev_private;
8272 	struct drm_i915_gem_object *obj;
8273 	struct drm_framebuffer *fb;
8274 
8275 	if (!dev_priv->fbdev)
8276 		return NULL;
8277 
8278 	if (!dev_priv->fbdev->fb)
8279 		return NULL;
8280 
8281 	obj = dev_priv->fbdev->fb->obj;
8282 	BUG_ON(!obj);
8283 
8284 	fb = &dev_priv->fbdev->fb->base;
8285 	if (fb->pitches[0] < intel_framebuffer_pitch_for_width(mode->hdisplay,
8286 							       fb->bits_per_pixel))
8287 		return NULL;
8288 
8289 	if (obj->base.size < mode->vdisplay * fb->pitches[0])
8290 		return NULL;
8291 
8292 	return fb;
8293 #else
8294 	return NULL;
8295 #endif
8296 }
8297 
8298 bool intel_get_load_detect_pipe(struct drm_connector *connector,
8299 				struct drm_display_mode *mode,
8300 				struct intel_load_detect_pipe *old,
8301 				struct drm_modeset_acquire_ctx *ctx)
8302 {
8303 	struct intel_crtc *intel_crtc;
8304 	struct intel_encoder *intel_encoder =
8305 		intel_attached_encoder(connector);
8306 	struct drm_crtc *possible_crtc;
8307 	struct drm_encoder *encoder = &intel_encoder->base;
8308 	struct drm_crtc *crtc = NULL;
8309 	struct drm_device *dev = encoder->dev;
8310 	struct drm_framebuffer *fb;
8311 	struct drm_mode_config *config = &dev->mode_config;
8312 	int ret, i = -1;
8313 
8314 	DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
8315 		      connector->base.id, connector->name,
8316 		      encoder->base.id, encoder->name);
8317 
8318 	drm_modeset_acquire_init(ctx, 0);
8319 
8320 retry:
8321 	ret = drm_modeset_lock(&config->connection_mutex, ctx);
8322 	if (ret)
8323 		goto fail_unlock;
8324 
8325 	/*
8326 	 * Algorithm gets a little messy:
8327 	 *
8328 	 *   - if the connector already has an assigned crtc, use it (but make
8329 	 *     sure it's on first)
8330 	 *
8331 	 *   - try to find the first unused crtc that can drive this connector,
8332 	 *     and use that if we find one
8333 	 */
8334 
8335 	/* See if we already have a CRTC for this connector */
8336 	if (encoder->crtc) {
8337 		crtc = encoder->crtc;
8338 
8339 		ret = drm_modeset_lock(&crtc->mutex, ctx);
8340 		if (ret)
8341 			goto fail_unlock;
8342 
8343 		old->dpms_mode = connector->dpms;
8344 		old->load_detect_temp = false;
8345 
8346 		/* Make sure the crtc and connector are running */
8347 		if (connector->dpms != DRM_MODE_DPMS_ON)
8348 			connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
8349 
8350 		return true;
8351 	}
8352 
8353 	/* Find an unused one (if possible) */
8354 	for_each_crtc(dev, possible_crtc) {
8355 		i++;
8356 		if (!(encoder->possible_crtcs & (1 << i)))
8357 			continue;
8358 		if (!possible_crtc->enabled) {
8359 			crtc = possible_crtc;
8360 			break;
8361 		}
8362 	}
8363 
8364 	/*
8365 	 * If we didn't find an unused CRTC, don't use any.
8366 	 */
8367 	if (!crtc) {
8368 		DRM_DEBUG_KMS("no pipe available for load-detect\n");
8369 		goto fail_unlock;
8370 	}
8371 
8372 	ret = drm_modeset_lock(&crtc->mutex, ctx);
8373 	if (ret)
8374 		goto fail_unlock;
8375 	intel_encoder->new_crtc = to_intel_crtc(crtc);
8376 	to_intel_connector(connector)->new_encoder = intel_encoder;
8377 
8378 	intel_crtc = to_intel_crtc(crtc);
8379 	intel_crtc->new_enabled = true;
8380 	intel_crtc->new_config = &intel_crtc->config;
8381 	old->dpms_mode = connector->dpms;
8382 	old->load_detect_temp = true;
8383 	old->release_fb = NULL;
8384 
8385 	if (!mode)
8386 		mode = &load_detect_mode;
8387 
8388 	/* We need a framebuffer large enough to accommodate all accesses
8389 	 * that the plane may generate whilst we perform load detection.
8390 	 * We can not rely on the fbcon either being present (we get called
8391 	 * during its initialisation to detect all boot displays, or it may
8392 	 * not even exist) or that it is large enough to satisfy the
8393 	 * requested mode.
8394 	 */
8395 	fb = mode_fits_in_fbdev(dev, mode);
8396 	if (fb == NULL) {
8397 		DRM_DEBUG_KMS("creating tmp fb for load-detection\n");
8398 		fb = intel_framebuffer_create_for_mode(dev, mode, 24, 32);
8399 		old->release_fb = fb;
8400 	} else
8401 		DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n");
8402 	if (IS_ERR(fb)) {
8403 		DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n");
8404 		goto fail;
8405 	}
8406 
8407 	if (intel_set_mode(crtc, mode, 0, 0, fb)) {
8408 		DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n");
8409 		if (old->release_fb)
8410 			old->release_fb->funcs->destroy(old->release_fb);
8411 		goto fail;
8412 	}
8413 
8414 	/* let the connector get through one full cycle before testing */
8415 	intel_wait_for_vblank(dev, intel_crtc->pipe);
8416 	return true;
8417 
8418  fail:
8419 	intel_crtc->new_enabled = crtc->enabled;
8420 	if (intel_crtc->new_enabled)
8421 		intel_crtc->new_config = &intel_crtc->config;
8422 	else
8423 		intel_crtc->new_config = NULL;
8424 fail_unlock:
8425 	if (ret == -EDEADLK) {
8426 		drm_modeset_backoff(ctx);
8427 		goto retry;
8428 	}
8429 
8430 	drm_modeset_drop_locks(ctx);
8431 	drm_modeset_acquire_fini(ctx);
8432 
8433 	return false;
8434 }
8435 
8436 void intel_release_load_detect_pipe(struct drm_connector *connector,
8437 				    struct intel_load_detect_pipe *old,
8438 				    struct drm_modeset_acquire_ctx *ctx)
8439 {
8440 	struct intel_encoder *intel_encoder =
8441 		intel_attached_encoder(connector);
8442 	struct drm_encoder *encoder = &intel_encoder->base;
8443 	struct drm_crtc *crtc = encoder->crtc;
8444 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8445 
8446 	DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
8447 		      connector->base.id, connector->name,
8448 		      encoder->base.id, encoder->name);
8449 
8450 	if (old->load_detect_temp) {
8451 		to_intel_connector(connector)->new_encoder = NULL;
8452 		intel_encoder->new_crtc = NULL;
8453 		intel_crtc->new_enabled = false;
8454 		intel_crtc->new_config = NULL;
8455 		intel_set_mode(crtc, NULL, 0, 0, NULL);
8456 
8457 		if (old->release_fb) {
8458 			drm_framebuffer_unregister_private(old->release_fb);
8459 			drm_framebuffer_unreference(old->release_fb);
8460 		}
8461 
8462 		goto unlock;
8463 		return;
8464 	}
8465 
8466 	/* Switch crtc and encoder back off if necessary */
8467 	if (old->dpms_mode != DRM_MODE_DPMS_ON)
8468 		connector->funcs->dpms(connector, old->dpms_mode);
8469 
8470 unlock:
8471 	drm_modeset_drop_locks(ctx);
8472 	drm_modeset_acquire_fini(ctx);
8473 }
8474 
8475 static int i9xx_pll_refclk(struct drm_device *dev,
8476 			   const struct intel_crtc_config *pipe_config)
8477 {
8478 	struct drm_i915_private *dev_priv = dev->dev_private;
8479 	u32 dpll = pipe_config->dpll_hw_state.dpll;
8480 
8481 	if ((dpll & PLL_REF_INPUT_MASK) == PLLB_REF_INPUT_SPREADSPECTRUMIN)
8482 		return dev_priv->vbt.lvds_ssc_freq;
8483 	else if (HAS_PCH_SPLIT(dev))
8484 		return 120000;
8485 	else if (!IS_GEN2(dev))
8486 		return 96000;
8487 	else
8488 		return 48000;
8489 }
8490 
8491 /* Returns the clock of the currently programmed mode of the given pipe. */
8492 static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
8493 				struct intel_crtc_config *pipe_config)
8494 {
8495 	struct drm_device *dev = crtc->base.dev;
8496 	struct drm_i915_private *dev_priv = dev->dev_private;
8497 	int pipe = pipe_config->cpu_transcoder;
8498 	u32 dpll = pipe_config->dpll_hw_state.dpll;
8499 	u32 fp;
8500 	intel_clock_t clock;
8501 	int refclk = i9xx_pll_refclk(dev, pipe_config);
8502 
8503 	if ((dpll & DISPLAY_RATE_SELECT_FPA1) == 0)
8504 		fp = pipe_config->dpll_hw_state.fp0;
8505 	else
8506 		fp = pipe_config->dpll_hw_state.fp1;
8507 
8508 	clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT;
8509 	if (IS_PINEVIEW(dev)) {
8510 		clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1;
8511 		clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT;
8512 	} else {
8513 		clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT;
8514 		clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT;
8515 	}
8516 
8517 	if (!IS_GEN2(dev)) {
8518 		if (IS_PINEVIEW(dev))
8519 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
8520 				DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
8521 		else
8522 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK) >>
8523 			       DPLL_FPA01_P1_POST_DIV_SHIFT);
8524 
8525 		switch (dpll & DPLL_MODE_MASK) {
8526 		case DPLLB_MODE_DAC_SERIAL:
8527 			clock.p2 = dpll & DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 ?
8528 				5 : 10;
8529 			break;
8530 		case DPLLB_MODE_LVDS:
8531 			clock.p2 = dpll & DPLLB_LVDS_P2_CLOCK_DIV_7 ?
8532 				7 : 14;
8533 			break;
8534 		default:
8535 			DRM_DEBUG_KMS("Unknown DPLL mode %08x in programmed "
8536 				  "mode\n", (int)(dpll & DPLL_MODE_MASK));
8537 			return;
8538 		}
8539 
8540 		if (IS_PINEVIEW(dev))
8541 			pineview_clock(refclk, &clock);
8542 		else
8543 			i9xx_clock(refclk, &clock);
8544 	} else {
8545 		u32 lvds = IS_I830(dev) ? 0 : I915_READ(LVDS);
8546 		bool is_lvds = (pipe == 1) && (lvds & LVDS_PORT_EN);
8547 
8548 		if (is_lvds) {
8549 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >>
8550 				       DPLL_FPA01_P1_POST_DIV_SHIFT);
8551 
8552 			if (lvds & LVDS_CLKB_POWER_UP)
8553 				clock.p2 = 7;
8554 			else
8555 				clock.p2 = 14;
8556 		} else {
8557 			if (dpll & PLL_P1_DIVIDE_BY_TWO)
8558 				clock.p1 = 2;
8559 			else {
8560 				clock.p1 = ((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830) >>
8561 					    DPLL_FPA01_P1_POST_DIV_SHIFT) + 2;
8562 			}
8563 			if (dpll & PLL_P2_DIVIDE_BY_4)
8564 				clock.p2 = 4;
8565 			else
8566 				clock.p2 = 2;
8567 		}
8568 
8569 		i9xx_clock(refclk, &clock);
8570 	}
8571 
8572 	/*
8573 	 * This value includes pixel_multiplier. We will use
8574 	 * port_clock to compute adjusted_mode.crtc_clock in the
8575 	 * encoder's get_config() function.
8576 	 */
8577 	pipe_config->port_clock = clock.dot;
8578 }
8579 
8580 int intel_dotclock_calculate(int link_freq,
8581 			     const struct intel_link_m_n *m_n)
8582 {
8583 	/*
8584 	 * The calculation for the data clock is:
8585 	 * pixel_clock = ((m/n)*(link_clock * nr_lanes))/bpp
8586 	 * But we want to avoid losing precison if possible, so:
8587 	 * pixel_clock = ((m * link_clock * nr_lanes)/(n*bpp))
8588 	 *
8589 	 * and the link clock is simpler:
8590 	 * link_clock = (m * link_clock) / n
8591 	 */
8592 
8593 	if (!m_n->link_n)
8594 		return 0;
8595 
8596 	return div_u64((u64)m_n->link_m * link_freq, m_n->link_n);
8597 }
8598 
8599 static void ironlake_pch_clock_get(struct intel_crtc *crtc,
8600 				   struct intel_crtc_config *pipe_config)
8601 {
8602 	struct drm_device *dev = crtc->base.dev;
8603 
8604 	/* read out port_clock from the DPLL */
8605 	i9xx_crtc_clock_get(crtc, pipe_config);
8606 
8607 	/*
8608 	 * This value does not include pixel_multiplier.
8609 	 * We will check that port_clock and adjusted_mode.crtc_clock
8610 	 * agree once we know their relationship in the encoder's
8611 	 * get_config() function.
8612 	 */
8613 	pipe_config->adjusted_mode.crtc_clock =
8614 		intel_dotclock_calculate(intel_fdi_link_freq(dev) * 10000,
8615 					 &pipe_config->fdi_m_n);
8616 }
8617 
8618 /** Returns the currently programmed mode of the given pipe. */
8619 struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
8620 					     struct drm_crtc *crtc)
8621 {
8622 	struct drm_i915_private *dev_priv = dev->dev_private;
8623 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8624 	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
8625 	struct drm_display_mode *mode;
8626 	struct intel_crtc_config pipe_config;
8627 	int htot = I915_READ(HTOTAL(cpu_transcoder));
8628 	int hsync = I915_READ(HSYNC(cpu_transcoder));
8629 	int vtot = I915_READ(VTOTAL(cpu_transcoder));
8630 	int vsync = I915_READ(VSYNC(cpu_transcoder));
8631 	enum i915_pipe pipe = intel_crtc->pipe;
8632 
8633 	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
8634 	if (!mode)
8635 		return NULL;
8636 
8637 	/*
8638 	 * Construct a pipe_config sufficient for getting the clock info
8639 	 * back out of crtc_clock_get.
8640 	 *
8641 	 * Note, if LVDS ever uses a non-1 pixel multiplier, we'll need
8642 	 * to use a real value here instead.
8643 	 */
8644 	pipe_config.cpu_transcoder = (enum transcoder) pipe;
8645 	pipe_config.pixel_multiplier = 1;
8646 	pipe_config.dpll_hw_state.dpll = I915_READ(DPLL(pipe));
8647 	pipe_config.dpll_hw_state.fp0 = I915_READ(FP0(pipe));
8648 	pipe_config.dpll_hw_state.fp1 = I915_READ(FP1(pipe));
8649 	i9xx_crtc_clock_get(intel_crtc, &pipe_config);
8650 
8651 	mode->clock = pipe_config.port_clock / pipe_config.pixel_multiplier;
8652 	mode->hdisplay = (htot & 0xffff) + 1;
8653 	mode->htotal = ((htot & 0xffff0000) >> 16) + 1;
8654 	mode->hsync_start = (hsync & 0xffff) + 1;
8655 	mode->hsync_end = ((hsync & 0xffff0000) >> 16) + 1;
8656 	mode->vdisplay = (vtot & 0xffff) + 1;
8657 	mode->vtotal = ((vtot & 0xffff0000) >> 16) + 1;
8658 	mode->vsync_start = (vsync & 0xffff) + 1;
8659 	mode->vsync_end = ((vsync & 0xffff0000) >> 16) + 1;
8660 
8661 	drm_mode_set_name(mode);
8662 
8663 	return mode;
8664 }
8665 
8666 static void intel_increase_pllclock(struct drm_crtc *crtc)
8667 {
8668 	struct drm_device *dev = crtc->dev;
8669 	struct drm_i915_private *dev_priv = dev->dev_private;
8670 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8671 	int pipe = intel_crtc->pipe;
8672 	int dpll_reg = DPLL(pipe);
8673 	int dpll;
8674 
8675 	if (HAS_PCH_SPLIT(dev))
8676 		return;
8677 
8678 	if (!dev_priv->lvds_downclock_avail)
8679 		return;
8680 
8681 	dpll = I915_READ(dpll_reg);
8682 	if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) {
8683 		DRM_DEBUG_DRIVER("upclocking LVDS\n");
8684 
8685 		assert_panel_unlocked(dev_priv, pipe);
8686 
8687 		dpll &= ~DISPLAY_RATE_SELECT_FPA1;
8688 		I915_WRITE(dpll_reg, dpll);
8689 		intel_wait_for_vblank(dev, pipe);
8690 
8691 		dpll = I915_READ(dpll_reg);
8692 		if (dpll & DISPLAY_RATE_SELECT_FPA1)
8693 			DRM_DEBUG_DRIVER("failed to upclock LVDS!\n");
8694 	}
8695 }
8696 
8697 static void intel_decrease_pllclock(struct drm_crtc *crtc)
8698 {
8699 	struct drm_device *dev = crtc->dev;
8700 	struct drm_i915_private *dev_priv = dev->dev_private;
8701 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8702 
8703 	if (HAS_PCH_SPLIT(dev))
8704 		return;
8705 
8706 	if (!dev_priv->lvds_downclock_avail)
8707 		return;
8708 
8709 	/*
8710 	 * Since this is called by a timer, we should never get here in
8711 	 * the manual case.
8712 	 */
8713 	if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
8714 		int pipe = intel_crtc->pipe;
8715 		int dpll_reg = DPLL(pipe);
8716 		int dpll;
8717 
8718 		DRM_DEBUG_DRIVER("downclocking LVDS\n");
8719 
8720 		assert_panel_unlocked(dev_priv, pipe);
8721 
8722 		dpll = I915_READ(dpll_reg);
8723 		dpll |= DISPLAY_RATE_SELECT_FPA1;
8724 		I915_WRITE(dpll_reg, dpll);
8725 		intel_wait_for_vblank(dev, pipe);
8726 		dpll = I915_READ(dpll_reg);
8727 		if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
8728 			DRM_DEBUG_DRIVER("failed to downclock LVDS!\n");
8729 	}
8730 
8731 }
8732 
8733 void intel_mark_busy(struct drm_device *dev)
8734 {
8735 	struct drm_i915_private *dev_priv = dev->dev_private;
8736 
8737 	if (dev_priv->mm.busy)
8738 		return;
8739 
8740 	intel_runtime_pm_get(dev_priv);
8741 	i915_update_gfx_val(dev_priv);
8742 	dev_priv->mm.busy = true;
8743 }
8744 
8745 void intel_mark_idle(struct drm_device *dev)
8746 {
8747 	struct drm_i915_private *dev_priv = dev->dev_private;
8748 	struct drm_crtc *crtc;
8749 
8750 	if (!dev_priv->mm.busy)
8751 		return;
8752 
8753 	dev_priv->mm.busy = false;
8754 
8755 	if (!i915.powersave)
8756 		goto out;
8757 
8758 	for_each_crtc(dev, crtc) {
8759 		if (!crtc->primary->fb)
8760 			continue;
8761 
8762 		intel_decrease_pllclock(crtc);
8763 	}
8764 
8765 	if (INTEL_INFO(dev)->gen >= 6)
8766 		gen6_rps_idle(dev->dev_private);
8767 
8768 out:
8769 	intel_runtime_pm_put(dev_priv);
8770 }
8771 
8772 void intel_mark_fb_busy(struct drm_i915_gem_object *obj,
8773 			struct intel_engine_cs *ring)
8774 {
8775 	struct drm_device *dev = obj->base.dev;
8776 	struct drm_crtc *crtc;
8777 
8778 	if (!i915.powersave)
8779 		return;
8780 
8781 	for_each_crtc(dev, crtc) {
8782 		if (!crtc->primary->fb)
8783 			continue;
8784 
8785 		if (to_intel_framebuffer(crtc->primary->fb)->obj != obj)
8786 			continue;
8787 
8788 		intel_increase_pllclock(crtc);
8789 		if (ring && intel_fbc_enabled(dev))
8790 			ring->fbc_dirty = true;
8791 	}
8792 }
8793 
8794 static void intel_crtc_destroy(struct drm_crtc *crtc)
8795 {
8796 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8797 	struct drm_device *dev = crtc->dev;
8798 	struct intel_unpin_work *work;
8799 
8800 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
8801 	work = intel_crtc->unpin_work;
8802 	intel_crtc->unpin_work = NULL;
8803 	lockmgr(&dev->event_lock, LK_RELEASE);
8804 
8805 	if (work) {
8806 		cancel_work_sync(&work->work);
8807 		kfree(work);
8808 	}
8809 
8810 	intel_crtc_cursor_set(crtc, NULL, 0, 0, 0);
8811 
8812 	drm_crtc_cleanup(crtc);
8813 
8814 	kfree(intel_crtc);
8815 }
8816 
8817 static void intel_unpin_work_fn(struct work_struct *__work)
8818 {
8819 	struct intel_unpin_work *work =
8820 		container_of(__work, struct intel_unpin_work, work);
8821 	struct drm_device *dev = work->crtc->dev;
8822 
8823 	mutex_lock(&dev->struct_mutex);
8824 	intel_unpin_fb_obj(work->old_fb_obj);
8825 	drm_gem_object_unreference(&work->pending_flip_obj->base);
8826 	drm_gem_object_unreference(&work->old_fb_obj->base);
8827 
8828 	intel_update_fbc(dev);
8829 	mutex_unlock(&dev->struct_mutex);
8830 
8831 	BUG_ON(atomic_read(&to_intel_crtc(work->crtc)->unpin_work_count) == 0);
8832 	atomic_dec(&to_intel_crtc(work->crtc)->unpin_work_count);
8833 
8834 	kfree(work);
8835 }
8836 
8837 static void do_intel_finish_page_flip(struct drm_device *dev,
8838 				      struct drm_crtc *crtc)
8839 {
8840 	struct drm_i915_private *dev_priv = dev->dev_private;
8841 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8842 	struct intel_unpin_work *work;
8843 
8844 	/* Ignore early vblank irqs */
8845 	if (intel_crtc == NULL)
8846 		return;
8847 
8848 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
8849 	work = intel_crtc->unpin_work;
8850 
8851 	/* Ensure we don't miss a work->pending update ... */
8852 	smp_rmb();
8853 
8854 	if (work == NULL || atomic_read(&work->pending) < INTEL_FLIP_COMPLETE) {
8855 		lockmgr(&dev->event_lock, LK_RELEASE);
8856 		return;
8857 	}
8858 
8859 	/* and that the unpin work is consistent wrt ->pending. */
8860 	smp_rmb();
8861 
8862 	intel_crtc->unpin_work = NULL;
8863 
8864 	if (work->event)
8865 		drm_send_vblank_event(dev, intel_crtc->pipe, work->event);
8866 
8867 	drm_crtc_vblank_put(crtc);
8868 
8869 	lockmgr(&dev->event_lock, LK_RELEASE);
8870 
8871 	wake_up_all(&dev_priv->pending_flip_queue);
8872 
8873 	queue_work(dev_priv->wq, &work->work);
8874 
8875 	trace_i915_flip_complete(intel_crtc->plane, work->pending_flip_obj);
8876 }
8877 
8878 void intel_finish_page_flip(struct drm_device *dev, int pipe)
8879 {
8880 	struct drm_i915_private *dev_priv = dev->dev_private;
8881 	struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
8882 
8883 	do_intel_finish_page_flip(dev, crtc);
8884 }
8885 
8886 void intel_finish_page_flip_plane(struct drm_device *dev, int plane)
8887 {
8888 	struct drm_i915_private *dev_priv = dev->dev_private;
8889 	struct drm_crtc *crtc = dev_priv->plane_to_crtc_mapping[plane];
8890 
8891 	do_intel_finish_page_flip(dev, crtc);
8892 }
8893 
8894 /* Is 'a' after or equal to 'b'? */
8895 static bool g4x_flip_count_after_eq(u32 a, u32 b)
8896 {
8897 	return !((a - b) & 0x80000000);
8898 }
8899 
8900 static bool page_flip_finished(struct intel_crtc *crtc)
8901 {
8902 	struct drm_device *dev = crtc->base.dev;
8903 	struct drm_i915_private *dev_priv = dev->dev_private;
8904 
8905 	/*
8906 	 * The relevant registers doen't exist on pre-ctg.
8907 	 * As the flip done interrupt doesn't trigger for mmio
8908 	 * flips on gmch platforms, a flip count check isn't
8909 	 * really needed there. But since ctg has the registers,
8910 	 * include it in the check anyway.
8911 	 */
8912 	if (INTEL_INFO(dev)->gen < 5 && !IS_G4X(dev))
8913 		return true;
8914 
8915 	/*
8916 	 * A DSPSURFLIVE check isn't enough in case the mmio and CS flips
8917 	 * used the same base address. In that case the mmio flip might
8918 	 * have completed, but the CS hasn't even executed the flip yet.
8919 	 *
8920 	 * A flip count check isn't enough as the CS might have updated
8921 	 * the base address just after start of vblank, but before we
8922 	 * managed to process the interrupt. This means we'd complete the
8923 	 * CS flip too soon.
8924 	 *
8925 	 * Combining both checks should get us a good enough result. It may
8926 	 * still happen that the CS flip has been executed, but has not
8927 	 * yet actually completed. But in case the base address is the same
8928 	 * anyway, we don't really care.
8929 	 */
8930 	return (I915_READ(DSPSURFLIVE(crtc->plane)) & ~0xfff) ==
8931 		crtc->unpin_work->gtt_offset &&
8932 		g4x_flip_count_after_eq(I915_READ(PIPE_FLIPCOUNT_GM45(crtc->pipe)),
8933 				    crtc->unpin_work->flip_count);
8934 }
8935 
8936 void intel_prepare_page_flip(struct drm_device *dev, int plane)
8937 {
8938 	struct drm_i915_private *dev_priv = dev->dev_private;
8939 	struct intel_crtc *intel_crtc =
8940 		to_intel_crtc(dev_priv->plane_to_crtc_mapping[plane]);
8941 
8942 	/* NB: An MMIO update of the plane base pointer will also
8943 	 * generate a page-flip completion irq, i.e. every modeset
8944 	 * is also accompanied by a spurious intel_prepare_page_flip().
8945 	 */
8946 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
8947 	if (intel_crtc->unpin_work && page_flip_finished(intel_crtc))
8948 		atomic_inc_not_zero(&intel_crtc->unpin_work->pending);
8949 	lockmgr(&dev->event_lock, LK_RELEASE);
8950 }
8951 
8952 static inline void intel_mark_page_flip_active(struct intel_crtc *intel_crtc)
8953 {
8954 	/* Ensure that the work item is consistent when activating it ... */
8955 	smp_wmb();
8956 	atomic_set(&intel_crtc->unpin_work->pending, INTEL_FLIP_PENDING);
8957 	/* and that it is marked active as soon as the irq could fire. */
8958 	smp_wmb();
8959 }
8960 
8961 static int intel_gen2_queue_flip(struct drm_device *dev,
8962 				 struct drm_crtc *crtc,
8963 				 struct drm_framebuffer *fb,
8964 				 struct drm_i915_gem_object *obj,
8965 				 struct intel_engine_cs *ring,
8966 				 uint32_t flags)
8967 {
8968 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
8969 	u32 flip_mask;
8970 	int ret;
8971 
8972 	ret = intel_ring_begin(ring, 6);
8973 	if (ret)
8974 		return ret;
8975 
8976 	/* Can't queue multiple flips, so wait for the previous
8977 	 * one to finish before executing the next.
8978 	 */
8979 	if (intel_crtc->plane)
8980 		flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
8981 	else
8982 		flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
8983 	intel_ring_emit(ring, MI_WAIT_FOR_EVENT | flip_mask);
8984 	intel_ring_emit(ring, MI_NOOP);
8985 	intel_ring_emit(ring, MI_DISPLAY_FLIP |
8986 			MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
8987 	intel_ring_emit(ring, fb->pitches[0]);
8988 	intel_ring_emit(ring, intel_crtc->unpin_work->gtt_offset);
8989 	intel_ring_emit(ring, 0); /* aux display base address, unused */
8990 
8991 	intel_mark_page_flip_active(intel_crtc);
8992 	__intel_ring_advance(ring);
8993 	return 0;
8994 }
8995 
8996 static int intel_gen3_queue_flip(struct drm_device *dev,
8997 				 struct drm_crtc *crtc,
8998 				 struct drm_framebuffer *fb,
8999 				 struct drm_i915_gem_object *obj,
9000 				 struct intel_engine_cs *ring,
9001 				 uint32_t flags)
9002 {
9003 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
9004 	u32 flip_mask;
9005 	int ret;
9006 
9007 	ret = intel_ring_begin(ring, 6);
9008 	if (ret)
9009 		return ret;
9010 
9011 	if (intel_crtc->plane)
9012 		flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
9013 	else
9014 		flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
9015 	intel_ring_emit(ring, MI_WAIT_FOR_EVENT | flip_mask);
9016 	intel_ring_emit(ring, MI_NOOP);
9017 	intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 |
9018 			MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
9019 	intel_ring_emit(ring, fb->pitches[0]);
9020 	intel_ring_emit(ring, intel_crtc->unpin_work->gtt_offset);
9021 	intel_ring_emit(ring, MI_NOOP);
9022 
9023 	intel_mark_page_flip_active(intel_crtc);
9024 	__intel_ring_advance(ring);
9025 	return 0;
9026 }
9027 
9028 static int intel_gen4_queue_flip(struct drm_device *dev,
9029 				 struct drm_crtc *crtc,
9030 				 struct drm_framebuffer *fb,
9031 				 struct drm_i915_gem_object *obj,
9032 				 struct intel_engine_cs *ring,
9033 				 uint32_t flags)
9034 {
9035 	struct drm_i915_private *dev_priv = dev->dev_private;
9036 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
9037 	uint32_t pf, pipesrc;
9038 	int ret;
9039 
9040 	ret = intel_ring_begin(ring, 4);
9041 	if (ret)
9042 		return ret;
9043 
9044 	/* i965+ uses the linear or tiled offsets from the
9045 	 * Display Registers (which do not change across a page-flip)
9046 	 * so we need only reprogram the base address.
9047 	 */
9048 	intel_ring_emit(ring, MI_DISPLAY_FLIP |
9049 			MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
9050 	intel_ring_emit(ring, fb->pitches[0]);
9051 	intel_ring_emit(ring, intel_crtc->unpin_work->gtt_offset |
9052 			obj->tiling_mode);
9053 
9054 	/* XXX Enabling the panel-fitter across page-flip is so far
9055 	 * untested on non-native modes, so ignore it for now.
9056 	 * pf = I915_READ(pipe == 0 ? PFA_CTL_1 : PFB_CTL_1) & PF_ENABLE;
9057 	 */
9058 	pf = 0;
9059 	pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
9060 	intel_ring_emit(ring, pf | pipesrc);
9061 
9062 	intel_mark_page_flip_active(intel_crtc);
9063 	__intel_ring_advance(ring);
9064 	return 0;
9065 }
9066 
9067 static int intel_gen6_queue_flip(struct drm_device *dev,
9068 				 struct drm_crtc *crtc,
9069 				 struct drm_framebuffer *fb,
9070 				 struct drm_i915_gem_object *obj,
9071 				 struct intel_engine_cs *ring,
9072 				 uint32_t flags)
9073 {
9074 	struct drm_i915_private *dev_priv = dev->dev_private;
9075 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
9076 	uint32_t pf, pipesrc;
9077 	int ret;
9078 
9079 	ret = intel_ring_begin(ring, 4);
9080 	if (ret)
9081 		return ret;
9082 
9083 	intel_ring_emit(ring, MI_DISPLAY_FLIP |
9084 			MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
9085 	intel_ring_emit(ring, fb->pitches[0] | obj->tiling_mode);
9086 	intel_ring_emit(ring, intel_crtc->unpin_work->gtt_offset);
9087 
9088 	/* Contrary to the suggestions in the documentation,
9089 	 * "Enable Panel Fitter" does not seem to be required when page
9090 	 * flipping with a non-native mode, and worse causes a normal
9091 	 * modeset to fail.
9092 	 * pf = I915_READ(PF_CTL(intel_crtc->pipe)) & PF_ENABLE;
9093 	 */
9094 	pf = 0;
9095 	pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
9096 	intel_ring_emit(ring, pf | pipesrc);
9097 
9098 	intel_mark_page_flip_active(intel_crtc);
9099 	__intel_ring_advance(ring);
9100 	return 0;
9101 }
9102 
9103 static int intel_gen7_queue_flip(struct drm_device *dev,
9104 				 struct drm_crtc *crtc,
9105 				 struct drm_framebuffer *fb,
9106 				 struct drm_i915_gem_object *obj,
9107 				 struct intel_engine_cs *ring,
9108 				 uint32_t flags)
9109 {
9110 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
9111 	uint32_t plane_bit = 0;
9112 	int len, ret;
9113 
9114 	switch (intel_crtc->plane) {
9115 	case PLANE_A:
9116 		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_A;
9117 		break;
9118 	case PLANE_B:
9119 		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_B;
9120 		break;
9121 	case PLANE_C:
9122 		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_C;
9123 		break;
9124 	default:
9125 		WARN_ONCE(1, "unknown plane in flip command\n");
9126 		return -ENODEV;
9127 	}
9128 
9129 	len = 4;
9130 	if (ring->id == RCS) {
9131 		len += 6;
9132 		/*
9133 		 * On Gen 8, SRM is now taking an extra dword to accommodate
9134 		 * 48bits addresses, and we need a NOOP for the batch size to
9135 		 * stay even.
9136 		 */
9137 		if (IS_GEN8(dev))
9138 			len += 2;
9139 	}
9140 
9141 	/*
9142 	 * BSpec MI_DISPLAY_FLIP for IVB:
9143 	 * "The full packet must be contained within the same cache line."
9144 	 *
9145 	 * Currently the LRI+SRM+MI_DISPLAY_FLIP all fit within the same
9146 	 * cacheline, if we ever start emitting more commands before
9147 	 * the MI_DISPLAY_FLIP we may need to first emit everything else,
9148 	 * then do the cacheline alignment, and finally emit the
9149 	 * MI_DISPLAY_FLIP.
9150 	 */
9151 	ret = intel_ring_cacheline_align(ring);
9152 	if (ret)
9153 		return ret;
9154 
9155 	ret = intel_ring_begin(ring, len);
9156 	if (ret)
9157 		return ret;
9158 
9159 	/* Unmask the flip-done completion message. Note that the bspec says that
9160 	 * we should do this for both the BCS and RCS, and that we must not unmask
9161 	 * more than one flip event at any time (or ensure that one flip message
9162 	 * can be sent by waiting for flip-done prior to queueing new flips).
9163 	 * Experimentation says that BCS works despite DERRMR masking all
9164 	 * flip-done completion events and that unmasking all planes at once
9165 	 * for the RCS also doesn't appear to drop events. Setting the DERRMR
9166 	 * to zero does lead to lockups within MI_DISPLAY_FLIP.
9167 	 */
9168 	if (ring->id == RCS) {
9169 		intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
9170 		intel_ring_emit(ring, DERRMR);
9171 		intel_ring_emit(ring, ~(DERRMR_PIPEA_PRI_FLIP_DONE |
9172 					DERRMR_PIPEB_PRI_FLIP_DONE |
9173 					DERRMR_PIPEC_PRI_FLIP_DONE));
9174 		if (IS_GEN8(dev))
9175 			intel_ring_emit(ring, MI_STORE_REGISTER_MEM_GEN8(1) |
9176 					      MI_SRM_LRM_GLOBAL_GTT);
9177 		else
9178 			intel_ring_emit(ring, MI_STORE_REGISTER_MEM(1) |
9179 					      MI_SRM_LRM_GLOBAL_GTT);
9180 		intel_ring_emit(ring, DERRMR);
9181 		intel_ring_emit(ring, ring->scratch.gtt_offset + 256);
9182 		if (IS_GEN8(dev)) {
9183 			intel_ring_emit(ring, 0);
9184 			intel_ring_emit(ring, MI_NOOP);
9185 		}
9186 	}
9187 
9188 	intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | plane_bit);
9189 	intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
9190 	intel_ring_emit(ring, intel_crtc->unpin_work->gtt_offset);
9191 	intel_ring_emit(ring, (MI_NOOP));
9192 
9193 	intel_mark_page_flip_active(intel_crtc);
9194 	__intel_ring_advance(ring);
9195 	return 0;
9196 }
9197 
9198 static int intel_default_queue_flip(struct drm_device *dev,
9199 				    struct drm_crtc *crtc,
9200 				    struct drm_framebuffer *fb,
9201 				    struct drm_i915_gem_object *obj,
9202 				    struct intel_engine_cs *ring,
9203 				    uint32_t flags)
9204 {
9205 	return -ENODEV;
9206 }
9207 
9208 static int intel_crtc_page_flip(struct drm_crtc *crtc,
9209 				struct drm_framebuffer *fb,
9210 				struct drm_pending_vblank_event *event,
9211 				uint32_t page_flip_flags)
9212 {
9213 	struct drm_device *dev = crtc->dev;
9214 	struct drm_i915_private *dev_priv = dev->dev_private;
9215 	struct drm_framebuffer *old_fb = crtc->primary->fb;
9216 	struct drm_i915_gem_object *obj = to_intel_framebuffer(fb)->obj;
9217 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
9218 	struct intel_unpin_work *work;
9219 	struct intel_engine_cs *ring;
9220 	int ret;
9221 
9222 	/* Can't change pixel format via MI display flips. */
9223 	if (fb->pixel_format != crtc->primary->fb->pixel_format)
9224 		return -EINVAL;
9225 
9226 	/*
9227 	 * TILEOFF/LINOFF registers can't be changed via MI display flips.
9228 	 * Note that pitch changes could also affect these register.
9229 	 */
9230 	if (INTEL_INFO(dev)->gen > 3 &&
9231 	    (fb->offsets[0] != crtc->primary->fb->offsets[0] ||
9232 	     fb->pitches[0] != crtc->primary->fb->pitches[0]))
9233 		return -EINVAL;
9234 
9235 	if (i915_terminally_wedged(&dev_priv->gpu_error))
9236 		goto out_hang;
9237 
9238 	work = kzalloc(sizeof(*work), GFP_KERNEL);
9239 	if (work == NULL)
9240 		return -ENOMEM;
9241 
9242 	work->event = event;
9243 	work->crtc = crtc;
9244 	work->old_fb_obj = to_intel_framebuffer(old_fb)->obj;
9245 	INIT_WORK(&work->work, intel_unpin_work_fn);
9246 
9247 	ret = drm_crtc_vblank_get(crtc);
9248 	if (ret)
9249 		goto free_work;
9250 
9251 	/* We borrow the event spin lock for protecting unpin_work */
9252 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
9253 	if (intel_crtc->unpin_work) {
9254 		lockmgr(&dev->event_lock, LK_RELEASE);
9255 		kfree(work);
9256 		drm_crtc_vblank_put(crtc);
9257 
9258 		DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
9259 		return -EBUSY;
9260 	}
9261 	intel_crtc->unpin_work = work;
9262 	lockmgr(&dev->event_lock, LK_RELEASE);
9263 
9264 	if (atomic_read(&intel_crtc->unpin_work_count) >= 2)
9265 		flush_workqueue(dev_priv->wq);
9266 
9267 	ret = i915_mutex_lock_interruptible(dev);
9268 	if (ret)
9269 		goto cleanup;
9270 
9271 	/* Reference the objects for the scheduled work. */
9272 	drm_gem_object_reference(&work->old_fb_obj->base);
9273 	drm_gem_object_reference(&obj->base);
9274 
9275 	crtc->primary->fb = fb;
9276 
9277 	work->pending_flip_obj = obj;
9278 
9279 	work->enable_stall_check = true;
9280 
9281 	atomic_inc(&intel_crtc->unpin_work_count);
9282 	intel_crtc->reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter);
9283 
9284 	if (INTEL_INFO(dev)->gen >= 5 || IS_G4X(dev))
9285 		work->flip_count = I915_READ(PIPE_FLIPCOUNT_GM45(intel_crtc->pipe)) + 1;
9286 
9287 	if (IS_VALLEYVIEW(dev)) {
9288 		ring = &dev_priv->ring[BCS];
9289 	} else if (INTEL_INFO(dev)->gen >= 7) {
9290 		ring = obj->ring;
9291 		if (ring == NULL || ring->id != RCS)
9292 			ring = &dev_priv->ring[BCS];
9293 	} else {
9294 		ring = &dev_priv->ring[RCS];
9295 	}
9296 
9297 	ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
9298 	if (ret)
9299 		goto cleanup_pending;
9300 
9301 	work->gtt_offset =
9302 		i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset;
9303 
9304 	ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, ring, page_flip_flags);
9305 	if (ret)
9306 		goto cleanup_unpin;
9307 
9308 	intel_disable_fbc(dev);
9309 	intel_mark_fb_busy(obj, NULL);
9310 	mutex_unlock(&dev->struct_mutex);
9311 
9312 	trace_i915_flip_request(intel_crtc->plane, obj);
9313 
9314 	return 0;
9315 
9316 cleanup_unpin:
9317 	intel_unpin_fb_obj(obj);
9318 cleanup_pending:
9319 	atomic_dec(&intel_crtc->unpin_work_count);
9320 	crtc->primary->fb = old_fb;
9321 	drm_gem_object_unreference(&work->old_fb_obj->base);
9322 	drm_gem_object_unreference(&obj->base);
9323 	mutex_unlock(&dev->struct_mutex);
9324 
9325 cleanup:
9326 	lockmgr(&dev->event_lock, LK_EXCLUSIVE);
9327 	intel_crtc->unpin_work = NULL;
9328 	lockmgr(&dev->event_lock, LK_RELEASE);
9329 
9330 	drm_crtc_vblank_put(crtc);
9331 free_work:
9332 	kfree(work);
9333 
9334 	if (ret == -EIO) {
9335 out_hang:
9336 		intel_crtc_wait_for_pending_flips(crtc);
9337 		ret = intel_pipe_set_base(crtc, crtc->x, crtc->y, fb);
9338 		if (ret == 0 && event)
9339 			drm_send_vblank_event(dev, intel_crtc->pipe, event);
9340 	}
9341 	return ret;
9342 }
9343 
9344 static struct drm_crtc_helper_funcs intel_helper_funcs = {
9345 	.mode_set_base_atomic = intel_pipe_set_base_atomic,
9346 	.load_lut = intel_crtc_load_lut,
9347 };
9348 
9349 /**
9350  * intel_modeset_update_staged_output_state
9351  *
9352  * Updates the staged output configuration state, e.g. after we've read out the
9353  * current hw state.
9354  */
9355 static void intel_modeset_update_staged_output_state(struct drm_device *dev)
9356 {
9357 	struct intel_crtc *crtc;
9358 	struct intel_encoder *encoder;
9359 	struct intel_connector *connector;
9360 
9361 	list_for_each_entry(connector, &dev->mode_config.connector_list,
9362 			    base.head) {
9363 		connector->new_encoder =
9364 			to_intel_encoder(connector->base.encoder);
9365 	}
9366 
9367 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
9368 			    base.head) {
9369 		encoder->new_crtc =
9370 			to_intel_crtc(encoder->base.crtc);
9371 	}
9372 
9373 	for_each_intel_crtc(dev, crtc) {
9374 		crtc->new_enabled = crtc->base.enabled;
9375 
9376 		if (crtc->new_enabled)
9377 			crtc->new_config = &crtc->config;
9378 		else
9379 			crtc->new_config = NULL;
9380 	}
9381 }
9382 
9383 /**
9384  * intel_modeset_commit_output_state
9385  *
9386  * This function copies the stage display pipe configuration to the real one.
9387  */
9388 static void intel_modeset_commit_output_state(struct drm_device *dev)
9389 {
9390 	struct intel_crtc *crtc;
9391 	struct intel_encoder *encoder;
9392 	struct intel_connector *connector;
9393 
9394 	list_for_each_entry(connector, &dev->mode_config.connector_list,
9395 			    base.head) {
9396 		connector->base.encoder = &connector->new_encoder->base;
9397 	}
9398 
9399 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
9400 			    base.head) {
9401 		encoder->base.crtc = &encoder->new_crtc->base;
9402 	}
9403 
9404 	for_each_intel_crtc(dev, crtc) {
9405 		crtc->base.enabled = crtc->new_enabled;
9406 	}
9407 }
9408 
9409 static void
9410 connected_sink_compute_bpp(struct intel_connector *connector,
9411 			   struct intel_crtc_config *pipe_config)
9412 {
9413 	int bpp = pipe_config->pipe_bpp;
9414 
9415 	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] checking for sink bpp constrains\n",
9416 		connector->base.base.id,
9417 		connector->base.name);
9418 
9419 	/* Don't use an invalid EDID bpc value */
9420 	if (connector->base.display_info.bpc &&
9421 	    connector->base.display_info.bpc * 3 < bpp) {
9422 		DRM_DEBUG_KMS("clamping display bpp (was %d) to EDID reported max of %d\n",
9423 			      bpp, connector->base.display_info.bpc*3);
9424 		pipe_config->pipe_bpp = connector->base.display_info.bpc*3;
9425 	}
9426 
9427 	/* Clamp bpp to 8 on screens without EDID 1.4 */
9428 	if (connector->base.display_info.bpc == 0 && bpp > 24) {
9429 		DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
9430 			      bpp);
9431 		pipe_config->pipe_bpp = 24;
9432 	}
9433 }
9434 
9435 static int
9436 compute_baseline_pipe_bpp(struct intel_crtc *crtc,
9437 			  struct drm_framebuffer *fb,
9438 			  struct intel_crtc_config *pipe_config)
9439 {
9440 	struct drm_device *dev = crtc->base.dev;
9441 	struct intel_connector *connector;
9442 	int bpp;
9443 
9444 	switch (fb->pixel_format) {
9445 	case DRM_FORMAT_C8:
9446 		bpp = 8*3; /* since we go through a colormap */
9447 		break;
9448 	case DRM_FORMAT_XRGB1555:
9449 	case DRM_FORMAT_ARGB1555:
9450 		/* checked in intel_framebuffer_init already */
9451 		if (WARN_ON(INTEL_INFO(dev)->gen > 3))
9452 			return -EINVAL;
9453 	case DRM_FORMAT_RGB565:
9454 		bpp = 6*3; /* min is 18bpp */
9455 		break;
9456 	case DRM_FORMAT_XBGR8888:
9457 	case DRM_FORMAT_ABGR8888:
9458 		/* checked in intel_framebuffer_init already */
9459 		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
9460 			return -EINVAL;
9461 	case DRM_FORMAT_XRGB8888:
9462 	case DRM_FORMAT_ARGB8888:
9463 		bpp = 8*3;
9464 		break;
9465 	case DRM_FORMAT_XRGB2101010:
9466 	case DRM_FORMAT_ARGB2101010:
9467 	case DRM_FORMAT_XBGR2101010:
9468 	case DRM_FORMAT_ABGR2101010:
9469 		/* checked in intel_framebuffer_init already */
9470 		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
9471 			return -EINVAL;
9472 		bpp = 10*3;
9473 		break;
9474 	/* TODO: gen4+ supports 16 bpc floating point, too. */
9475 	default:
9476 		DRM_DEBUG_KMS("unsupported depth\n");
9477 		return -EINVAL;
9478 	}
9479 
9480 	pipe_config->pipe_bpp = bpp;
9481 
9482 	/* Clamp display bpp to EDID value */
9483 	list_for_each_entry(connector, &dev->mode_config.connector_list,
9484 			    base.head) {
9485 		if (!connector->new_encoder ||
9486 		    connector->new_encoder->new_crtc != crtc)
9487 			continue;
9488 
9489 		connected_sink_compute_bpp(connector, pipe_config);
9490 	}
9491 
9492 	return bpp;
9493 }
9494 
9495 static void intel_dump_crtc_timings(const struct drm_display_mode *mode)
9496 {
9497 	DRM_DEBUG_KMS("crtc timings: %d %d %d %d %d %d %d %d %d, "
9498 			"type: 0x%x flags: 0x%x\n",
9499 		mode->crtc_clock,
9500 		mode->crtc_hdisplay, mode->crtc_hsync_start,
9501 		mode->crtc_hsync_end, mode->crtc_htotal,
9502 		mode->crtc_vdisplay, mode->crtc_vsync_start,
9503 		mode->crtc_vsync_end, mode->crtc_vtotal, mode->type, mode->flags);
9504 }
9505 
9506 static void intel_dump_pipe_config(struct intel_crtc *crtc,
9507 				   struct intel_crtc_config *pipe_config,
9508 				   const char *context)
9509 {
9510 	DRM_DEBUG_KMS("[CRTC:%d]%s config for pipe %c\n", crtc->base.base.id,
9511 		      context, pipe_name(crtc->pipe));
9512 
9513 	DRM_DEBUG_KMS("cpu_transcoder: %c\n", transcoder_name(pipe_config->cpu_transcoder));
9514 	DRM_DEBUG_KMS("pipe bpp: %i, dithering: %i\n",
9515 		      pipe_config->pipe_bpp, pipe_config->dither);
9516 	DRM_DEBUG_KMS("fdi/pch: %i, lanes: %i, gmch_m: %u, gmch_n: %u, link_m: %u, link_n: %u, tu: %u\n",
9517 		      pipe_config->has_pch_encoder,
9518 		      pipe_config->fdi_lanes,
9519 		      pipe_config->fdi_m_n.gmch_m, pipe_config->fdi_m_n.gmch_n,
9520 		      pipe_config->fdi_m_n.link_m, pipe_config->fdi_m_n.link_n,
9521 		      pipe_config->fdi_m_n.tu);
9522 	DRM_DEBUG_KMS("dp: %i, gmch_m: %u, gmch_n: %u, link_m: %u, link_n: %u, tu: %u\n",
9523 		      pipe_config->has_dp_encoder,
9524 		      pipe_config->dp_m_n.gmch_m, pipe_config->dp_m_n.gmch_n,
9525 		      pipe_config->dp_m_n.link_m, pipe_config->dp_m_n.link_n,
9526 		      pipe_config->dp_m_n.tu);
9527 	DRM_DEBUG_KMS("requested mode:\n");
9528 	drm_mode_debug_printmodeline(&pipe_config->requested_mode);
9529 	DRM_DEBUG_KMS("adjusted mode:\n");
9530 	drm_mode_debug_printmodeline(&pipe_config->adjusted_mode);
9531 	intel_dump_crtc_timings(&pipe_config->adjusted_mode);
9532 	DRM_DEBUG_KMS("port clock: %d\n", pipe_config->port_clock);
9533 	DRM_DEBUG_KMS("pipe src size: %dx%d\n",
9534 		      pipe_config->pipe_src_w, pipe_config->pipe_src_h);
9535 	DRM_DEBUG_KMS("gmch pfit: control: 0x%08x, ratios: 0x%08x, lvds border: 0x%08x\n",
9536 		      pipe_config->gmch_pfit.control,
9537 		      pipe_config->gmch_pfit.pgm_ratios,
9538 		      pipe_config->gmch_pfit.lvds_border_bits);
9539 	DRM_DEBUG_KMS("pch pfit: pos: 0x%08x, size: 0x%08x, %s\n",
9540 		      pipe_config->pch_pfit.pos,
9541 		      pipe_config->pch_pfit.size,
9542 		      pipe_config->pch_pfit.enabled ? "enabled" : "disabled");
9543 	DRM_DEBUG_KMS("ips: %i\n", pipe_config->ips_enabled);
9544 	DRM_DEBUG_KMS("double wide: %i\n", pipe_config->double_wide);
9545 }
9546 
9547 static bool encoders_cloneable(const struct intel_encoder *a,
9548 			       const struct intel_encoder *b)
9549 {
9550 	/* masks could be asymmetric, so check both ways */
9551 	return a == b || (a->cloneable & (1 << b->type) &&
9552 			  b->cloneable & (1 << a->type));
9553 }
9554 
9555 static bool check_single_encoder_cloning(struct intel_crtc *crtc,
9556 					 struct intel_encoder *encoder)
9557 {
9558 	struct drm_device *dev = crtc->base.dev;
9559 	struct intel_encoder *source_encoder;
9560 
9561 	list_for_each_entry(source_encoder,
9562 			    &dev->mode_config.encoder_list, base.head) {
9563 		if (source_encoder->new_crtc != crtc)
9564 			continue;
9565 
9566 		if (!encoders_cloneable(encoder, source_encoder))
9567 			return false;
9568 	}
9569 
9570 	return true;
9571 }
9572 
9573 static bool check_encoder_cloning(struct intel_crtc *crtc)
9574 {
9575 	struct drm_device *dev = crtc->base.dev;
9576 	struct intel_encoder *encoder;
9577 
9578 	list_for_each_entry(encoder,
9579 			    &dev->mode_config.encoder_list, base.head) {
9580 		if (encoder->new_crtc != crtc)
9581 			continue;
9582 
9583 		if (!check_single_encoder_cloning(crtc, encoder))
9584 			return false;
9585 	}
9586 
9587 	return true;
9588 }
9589 
9590 static struct intel_crtc_config *
9591 intel_modeset_pipe_config(struct drm_crtc *crtc,
9592 			  struct drm_framebuffer *fb,
9593 			  struct drm_display_mode *mode)
9594 {
9595 	struct drm_device *dev = crtc->dev;
9596 	struct intel_encoder *encoder;
9597 	struct intel_crtc_config *pipe_config;
9598 	int plane_bpp, ret = -EINVAL;
9599 	bool retry = true;
9600 
9601 	if (!check_encoder_cloning(to_intel_crtc(crtc))) {
9602 		DRM_DEBUG_KMS("rejecting invalid cloning configuration\n");
9603 		return ERR_PTR(-EINVAL);
9604 	}
9605 
9606 	pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL);
9607 	if (!pipe_config)
9608 		return ERR_PTR(-ENOMEM);
9609 
9610 	drm_mode_copy(&pipe_config->adjusted_mode, mode);
9611 	drm_mode_copy(&pipe_config->requested_mode, mode);
9612 
9613 	pipe_config->cpu_transcoder =
9614 		(enum transcoder) to_intel_crtc(crtc)->pipe;
9615 	pipe_config->shared_dpll = DPLL_ID_PRIVATE;
9616 
9617 	/*
9618 	 * Sanitize sync polarity flags based on requested ones. If neither
9619 	 * positive or negative polarity is requested, treat this as meaning
9620 	 * negative polarity.
9621 	 */
9622 	if (!(pipe_config->adjusted_mode.flags &
9623 	      (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC)))
9624 		pipe_config->adjusted_mode.flags |= DRM_MODE_FLAG_NHSYNC;
9625 
9626 	if (!(pipe_config->adjusted_mode.flags &
9627 	      (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC)))
9628 		pipe_config->adjusted_mode.flags |= DRM_MODE_FLAG_NVSYNC;
9629 
9630 	/* Compute a starting value for pipe_config->pipe_bpp taking the source
9631 	 * plane pixel format and any sink constraints into account. Returns the
9632 	 * source plane bpp so that dithering can be selected on mismatches
9633 	 * after encoders and crtc also have had their say. */
9634 	plane_bpp = compute_baseline_pipe_bpp(to_intel_crtc(crtc),
9635 					      fb, pipe_config);
9636 	if (plane_bpp < 0)
9637 		goto fail;
9638 
9639 	/*
9640 	 * Determine the real pipe dimensions. Note that stereo modes can
9641 	 * increase the actual pipe size due to the frame doubling and
9642 	 * insertion of additional space for blanks between the frame. This
9643 	 * is stored in the crtc timings. We use the requested mode to do this
9644 	 * computation to clearly distinguish it from the adjusted mode, which
9645 	 * can be changed by the connectors in the below retry loop.
9646 	 */
9647 	drm_mode_set_crtcinfo(&pipe_config->requested_mode, CRTC_STEREO_DOUBLE);
9648 	pipe_config->pipe_src_w = pipe_config->requested_mode.crtc_hdisplay;
9649 	pipe_config->pipe_src_h = pipe_config->requested_mode.crtc_vdisplay;
9650 
9651 encoder_retry:
9652 	/* Ensure the port clock defaults are reset when retrying. */
9653 	pipe_config->port_clock = 0;
9654 	pipe_config->pixel_multiplier = 1;
9655 
9656 	/* Fill in default crtc timings, allow encoders to overwrite them. */
9657 	drm_mode_set_crtcinfo(&pipe_config->adjusted_mode, CRTC_STEREO_DOUBLE);
9658 
9659 	/* Pass our mode to the connectors and the CRTC to give them a chance to
9660 	 * adjust it according to limitations or connector properties, and also
9661 	 * a chance to reject the mode entirely.
9662 	 */
9663 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
9664 			    base.head) {
9665 
9666 		if (&encoder->new_crtc->base != crtc)
9667 			continue;
9668 
9669 		if (!(encoder->compute_config(encoder, pipe_config))) {
9670 			DRM_DEBUG_KMS("Encoder config failure\n");
9671 			goto fail;
9672 		}
9673 	}
9674 
9675 	/* Set default port clock if not overwritten by the encoder. Needs to be
9676 	 * done afterwards in case the encoder adjusts the mode. */
9677 	if (!pipe_config->port_clock)
9678 		pipe_config->port_clock = pipe_config->adjusted_mode.crtc_clock
9679 			* pipe_config->pixel_multiplier;
9680 
9681 	ret = intel_crtc_compute_config(to_intel_crtc(crtc), pipe_config);
9682 	if (ret < 0) {
9683 		DRM_DEBUG_KMS("CRTC fixup failed\n");
9684 		goto fail;
9685 	}
9686 
9687 	if (ret == RETRY) {
9688 		if (WARN(!retry, "loop in pipe configuration computation\n")) {
9689 			ret = -EINVAL;
9690 			goto fail;
9691 		}
9692 
9693 		DRM_DEBUG_KMS("CRTC bw constrained, retrying\n");
9694 		retry = false;
9695 		goto encoder_retry;
9696 	}
9697 
9698 	pipe_config->dither = pipe_config->pipe_bpp != plane_bpp;
9699 	DRM_DEBUG_KMS("plane bpp: %i, pipe bpp: %i, dithering: %i\n",
9700 		      plane_bpp, pipe_config->pipe_bpp, pipe_config->dither);
9701 
9702 	return pipe_config;
9703 fail:
9704 	kfree(pipe_config);
9705 	return ERR_PTR(ret);
9706 }
9707 
9708 /* Computes which crtcs are affected and sets the relevant bits in the mask. For
9709  * simplicity we use the crtc's pipe number (because it's easier to obtain). */
9710 static void
9711 intel_modeset_affected_pipes(struct drm_crtc *crtc, unsigned *modeset_pipes,
9712 			     unsigned *prepare_pipes, unsigned *disable_pipes)
9713 {
9714 	struct intel_crtc *intel_crtc;
9715 	struct drm_device *dev = crtc->dev;
9716 	struct intel_encoder *encoder;
9717 	struct intel_connector *connector;
9718 	struct drm_crtc *tmp_crtc;
9719 
9720 	*disable_pipes = *modeset_pipes = *prepare_pipes = 0;
9721 
9722 	/* Check which crtcs have changed outputs connected to them, these need
9723 	 * to be part of the prepare_pipes mask. We don't (yet) support global
9724 	 * modeset across multiple crtcs, so modeset_pipes will only have one
9725 	 * bit set at most. */
9726 	list_for_each_entry(connector, &dev->mode_config.connector_list,
9727 			    base.head) {
9728 		if (connector->base.encoder == &connector->new_encoder->base)
9729 			continue;
9730 
9731 		if (connector->base.encoder) {
9732 			tmp_crtc = connector->base.encoder->crtc;
9733 
9734 			*prepare_pipes |= 1 << to_intel_crtc(tmp_crtc)->pipe;
9735 		}
9736 
9737 		if (connector->new_encoder)
9738 			*prepare_pipes |=
9739 				1 << connector->new_encoder->new_crtc->pipe;
9740 	}
9741 
9742 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
9743 			    base.head) {
9744 		if (encoder->base.crtc == &encoder->new_crtc->base)
9745 			continue;
9746 
9747 		if (encoder->base.crtc) {
9748 			tmp_crtc = encoder->base.crtc;
9749 
9750 			*prepare_pipes |= 1 << to_intel_crtc(tmp_crtc)->pipe;
9751 		}
9752 
9753 		if (encoder->new_crtc)
9754 			*prepare_pipes |= 1 << encoder->new_crtc->pipe;
9755 	}
9756 
9757 	/* Check for pipes that will be enabled/disabled ... */
9758 	for_each_intel_crtc(dev, intel_crtc) {
9759 		if (intel_crtc->base.enabled == intel_crtc->new_enabled)
9760 			continue;
9761 
9762 		if (!intel_crtc->new_enabled)
9763 			*disable_pipes |= 1 << intel_crtc->pipe;
9764 		else
9765 			*prepare_pipes |= 1 << intel_crtc->pipe;
9766 	}
9767 
9768 
9769 	/* set_mode is also used to update properties on life display pipes. */
9770 	intel_crtc = to_intel_crtc(crtc);
9771 	if (intel_crtc->new_enabled)
9772 		*prepare_pipes |= 1 << intel_crtc->pipe;
9773 
9774 	/*
9775 	 * For simplicity do a full modeset on any pipe where the output routing
9776 	 * changed. We could be more clever, but that would require us to be
9777 	 * more careful with calling the relevant encoder->mode_set functions.
9778 	 */
9779 	if (*prepare_pipes)
9780 		*modeset_pipes = *prepare_pipes;
9781 
9782 	/* ... and mask these out. */
9783 	*modeset_pipes &= ~(*disable_pipes);
9784 	*prepare_pipes &= ~(*disable_pipes);
9785 
9786 	/*
9787 	 * HACK: We don't (yet) fully support global modesets. intel_set_config
9788 	 * obies this rule, but the modeset restore mode of
9789 	 * intel_modeset_setup_hw_state does not.
9790 	 */
9791 	*modeset_pipes &= 1 << intel_crtc->pipe;
9792 	*prepare_pipes &= 1 << intel_crtc->pipe;
9793 
9794 	DRM_DEBUG_KMS("set mode pipe masks: modeset: %x, prepare: %x, disable: %x\n",
9795 		      *modeset_pipes, *prepare_pipes, *disable_pipes);
9796 }
9797 
9798 static bool intel_crtc_in_use(struct drm_crtc *crtc)
9799 {
9800 	struct drm_encoder *encoder;
9801 	struct drm_device *dev = crtc->dev;
9802 
9803 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
9804 		if (encoder->crtc == crtc)
9805 			return true;
9806 
9807 	return false;
9808 }
9809 
9810 static void
9811 intel_modeset_update_state(struct drm_device *dev, unsigned prepare_pipes)
9812 {
9813 	struct intel_encoder *intel_encoder;
9814 	struct intel_crtc *intel_crtc;
9815 	struct drm_connector *connector;
9816 
9817 	list_for_each_entry(intel_encoder, &dev->mode_config.encoder_list,
9818 			    base.head) {
9819 		if (!intel_encoder->base.crtc)
9820 			continue;
9821 
9822 		intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
9823 
9824 		if (prepare_pipes & (1 << intel_crtc->pipe))
9825 			intel_encoder->connectors_active = false;
9826 	}
9827 
9828 	intel_modeset_commit_output_state(dev);
9829 
9830 	/* Double check state. */
9831 	for_each_intel_crtc(dev, intel_crtc) {
9832 		WARN_ON(intel_crtc->base.enabled != intel_crtc_in_use(&intel_crtc->base));
9833 		WARN_ON(intel_crtc->new_config &&
9834 			intel_crtc->new_config != &intel_crtc->config);
9835 		WARN_ON(intel_crtc->base.enabled != !!intel_crtc->new_config);
9836 	}
9837 
9838 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
9839 		if (!connector->encoder || !connector->encoder->crtc)
9840 			continue;
9841 
9842 		intel_crtc = to_intel_crtc(connector->encoder->crtc);
9843 
9844 		if (prepare_pipes & (1 << intel_crtc->pipe)) {
9845 			struct drm_property *dpms_property =
9846 				dev->mode_config.dpms_property;
9847 
9848 			connector->dpms = DRM_MODE_DPMS_ON;
9849 			drm_object_property_set_value(&connector->base,
9850 							 dpms_property,
9851 							 DRM_MODE_DPMS_ON);
9852 
9853 			intel_encoder = to_intel_encoder(connector->encoder);
9854 			intel_encoder->connectors_active = true;
9855 		}
9856 	}
9857 
9858 }
9859 
9860 static bool intel_fuzzy_clock_check(int clock1, int clock2)
9861 {
9862 	int diff;
9863 
9864 	if (clock1 == clock2)
9865 		return true;
9866 
9867 	if (!clock1 || !clock2)
9868 		return false;
9869 
9870 	diff = abs(clock1 - clock2);
9871 
9872 	if (((((diff + clock1 + clock2) * 100)) / (clock1 + clock2)) < 105)
9873 		return true;
9874 
9875 	return false;
9876 }
9877 
9878 #define for_each_intel_crtc_masked(dev, mask, intel_crtc) \
9879 	list_for_each_entry((intel_crtc), \
9880 			    &(dev)->mode_config.crtc_list, \
9881 			    base.head) \
9882 		if (mask & (1 <<(intel_crtc)->pipe))
9883 
9884 static bool
9885 intel_pipe_config_compare(struct drm_device *dev,
9886 			  struct intel_crtc_config *current_config,
9887 			  struct intel_crtc_config *pipe_config)
9888 {
9889 #define PIPE_CONF_CHECK_X(name)	\
9890 	if (current_config->name != pipe_config->name) { \
9891 		DRM_ERROR("mismatch in " #name " " \
9892 			  "(expected 0x%08x, found 0x%08x)\n", \
9893 			  current_config->name, \
9894 			  pipe_config->name); \
9895 		return false; \
9896 	}
9897 
9898 #define PIPE_CONF_CHECK_I(name)	\
9899 	if (current_config->name != pipe_config->name) { \
9900 		DRM_ERROR("mismatch in " #name " " \
9901 			  "(expected %i, found %i)\n", \
9902 			  current_config->name, \
9903 			  pipe_config->name); \
9904 		return false; \
9905 	}
9906 
9907 #define PIPE_CONF_CHECK_FLAGS(name, mask)	\
9908 	if ((current_config->name ^ pipe_config->name) & (mask)) { \
9909 		DRM_ERROR("mismatch in " #name "(" #mask ") "	   \
9910 			  "(expected %i, found %i)\n", \
9911 			  current_config->name & (mask), \
9912 			  pipe_config->name & (mask)); \
9913 		return false; \
9914 	}
9915 
9916 #define PIPE_CONF_CHECK_CLOCK_FUZZY(name) \
9917 	if (!intel_fuzzy_clock_check(current_config->name, pipe_config->name)) { \
9918 		DRM_ERROR("mismatch in " #name " " \
9919 			  "(expected %i, found %i)\n", \
9920 			  current_config->name, \
9921 			  pipe_config->name); \
9922 		return false; \
9923 	}
9924 
9925 #define PIPE_CONF_QUIRK(quirk)	\
9926 	((current_config->quirks | pipe_config->quirks) & (quirk))
9927 
9928 	PIPE_CONF_CHECK_I(cpu_transcoder);
9929 
9930 	PIPE_CONF_CHECK_I(has_pch_encoder);
9931 	PIPE_CONF_CHECK_I(fdi_lanes);
9932 	PIPE_CONF_CHECK_I(fdi_m_n.gmch_m);
9933 	PIPE_CONF_CHECK_I(fdi_m_n.gmch_n);
9934 	PIPE_CONF_CHECK_I(fdi_m_n.link_m);
9935 	PIPE_CONF_CHECK_I(fdi_m_n.link_n);
9936 	PIPE_CONF_CHECK_I(fdi_m_n.tu);
9937 
9938 	PIPE_CONF_CHECK_I(has_dp_encoder);
9939 	PIPE_CONF_CHECK_I(dp_m_n.gmch_m);
9940 	PIPE_CONF_CHECK_I(dp_m_n.gmch_n);
9941 	PIPE_CONF_CHECK_I(dp_m_n.link_m);
9942 	PIPE_CONF_CHECK_I(dp_m_n.link_n);
9943 	PIPE_CONF_CHECK_I(dp_m_n.tu);
9944 
9945 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hdisplay);
9946 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_htotal);
9947 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hblank_start);
9948 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hblank_end);
9949 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hsync_start);
9950 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hsync_end);
9951 
9952 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vdisplay);
9953 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vtotal);
9954 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vblank_start);
9955 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vblank_end);
9956 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vsync_start);
9957 	PIPE_CONF_CHECK_I(adjusted_mode.crtc_vsync_end);
9958 
9959 	PIPE_CONF_CHECK_I(pixel_multiplier);
9960 	PIPE_CONF_CHECK_I(has_hdmi_sink);
9961 	if ((INTEL_INFO(dev)->gen < 8 && !IS_HASWELL(dev)) ||
9962 	    IS_VALLEYVIEW(dev))
9963 		PIPE_CONF_CHECK_I(limited_color_range);
9964 
9965 	PIPE_CONF_CHECK_I(has_audio);
9966 
9967 	PIPE_CONF_CHECK_FLAGS(adjusted_mode.flags,
9968 			      DRM_MODE_FLAG_INTERLACE);
9969 
9970 	if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS)) {
9971 		PIPE_CONF_CHECK_FLAGS(adjusted_mode.flags,
9972 				      DRM_MODE_FLAG_PHSYNC);
9973 		PIPE_CONF_CHECK_FLAGS(adjusted_mode.flags,
9974 				      DRM_MODE_FLAG_NHSYNC);
9975 		PIPE_CONF_CHECK_FLAGS(adjusted_mode.flags,
9976 				      DRM_MODE_FLAG_PVSYNC);
9977 		PIPE_CONF_CHECK_FLAGS(adjusted_mode.flags,
9978 				      DRM_MODE_FLAG_NVSYNC);
9979 	}
9980 
9981 	PIPE_CONF_CHECK_I(pipe_src_w);
9982 	PIPE_CONF_CHECK_I(pipe_src_h);
9983 
9984 	/*
9985 	 * FIXME: BIOS likes to set up a cloned config with lvds+external
9986 	 * screen. Since we don't yet re-compute the pipe config when moving
9987 	 * just the lvds port away to another pipe the sw tracking won't match.
9988 	 *
9989 	 * Proper atomic modesets with recomputed global state will fix this.
9990 	 * Until then just don't check gmch state for inherited modes.
9991 	 */
9992 	if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_INHERITED_MODE)) {
9993 		PIPE_CONF_CHECK_I(gmch_pfit.control);
9994 		/* pfit ratios are autocomputed by the hw on gen4+ */
9995 		if (INTEL_INFO(dev)->gen < 4)
9996 			PIPE_CONF_CHECK_I(gmch_pfit.pgm_ratios);
9997 		PIPE_CONF_CHECK_I(gmch_pfit.lvds_border_bits);
9998 	}
9999 
10000 	PIPE_CONF_CHECK_I(pch_pfit.enabled);
10001 	if (current_config->pch_pfit.enabled) {
10002 		PIPE_CONF_CHECK_I(pch_pfit.pos);
10003 		PIPE_CONF_CHECK_I(pch_pfit.size);
10004 	}
10005 
10006 	/* BDW+ don't expose a synchronous way to read the state */
10007 	if (IS_HASWELL(dev))
10008 		PIPE_CONF_CHECK_I(ips_enabled);
10009 
10010 	PIPE_CONF_CHECK_I(double_wide);
10011 
10012 	PIPE_CONF_CHECK_I(shared_dpll);
10013 	PIPE_CONF_CHECK_X(dpll_hw_state.dpll);
10014 	PIPE_CONF_CHECK_X(dpll_hw_state.dpll_md);
10015 	PIPE_CONF_CHECK_X(dpll_hw_state.fp0);
10016 	PIPE_CONF_CHECK_X(dpll_hw_state.fp1);
10017 
10018 	if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5)
10019 		PIPE_CONF_CHECK_I(pipe_bpp);
10020 
10021 	PIPE_CONF_CHECK_CLOCK_FUZZY(adjusted_mode.crtc_clock);
10022 	PIPE_CONF_CHECK_CLOCK_FUZZY(port_clock);
10023 
10024 #undef PIPE_CONF_CHECK_X
10025 #undef PIPE_CONF_CHECK_I
10026 #undef PIPE_CONF_CHECK_FLAGS
10027 #undef PIPE_CONF_CHECK_CLOCK_FUZZY
10028 #undef PIPE_CONF_QUIRK
10029 
10030 	return true;
10031 }
10032 
10033 static void
10034 check_connector_state(struct drm_device *dev)
10035 {
10036 	struct intel_connector *connector;
10037 
10038 	list_for_each_entry(connector, &dev->mode_config.connector_list,
10039 			    base.head) {
10040 		/* This also checks the encoder/connector hw state with the
10041 		 * ->get_hw_state callbacks. */
10042 		intel_connector_check_state(connector);
10043 
10044 		WARN(&connector->new_encoder->base != connector->base.encoder,
10045 		     "connector's staged encoder doesn't match current encoder\n");
10046 	}
10047 }
10048 
10049 static void
10050 check_encoder_state(struct drm_device *dev)
10051 {
10052 	struct intel_encoder *encoder;
10053 	struct intel_connector *connector;
10054 
10055 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
10056 			    base.head) {
10057 		bool enabled = false;
10058 		bool active = false;
10059 		enum i915_pipe pipe, tracked_pipe;
10060 
10061 		DRM_DEBUG_KMS("[ENCODER:%d:%s]\n",
10062 			      encoder->base.base.id,
10063 			      encoder->base.name);
10064 
10065 		WARN(&encoder->new_crtc->base != encoder->base.crtc,
10066 		     "encoder's stage crtc doesn't match current crtc\n");
10067 		WARN(encoder->connectors_active && !encoder->base.crtc,
10068 		     "encoder's active_connectors set, but no crtc\n");
10069 
10070 		list_for_each_entry(connector, &dev->mode_config.connector_list,
10071 				    base.head) {
10072 			if (connector->base.encoder != &encoder->base)
10073 				continue;
10074 			enabled = true;
10075 			if (connector->base.dpms != DRM_MODE_DPMS_OFF)
10076 				active = true;
10077 		}
10078 		WARN(!!encoder->base.crtc != enabled,
10079 		     "encoder's enabled state mismatch "
10080 		     "(expected %i, found %i)\n",
10081 		     !!encoder->base.crtc, enabled);
10082 		WARN(active && !encoder->base.crtc,
10083 		     "active encoder with no crtc\n");
10084 
10085 		WARN(encoder->connectors_active != active,
10086 		     "encoder's computed active state doesn't match tracked active state "
10087 		     "(expected %i, found %i)\n", active, encoder->connectors_active);
10088 
10089 		active = encoder->get_hw_state(encoder, &pipe);
10090 		WARN(active != encoder->connectors_active,
10091 		     "encoder's hw state doesn't match sw tracking "
10092 		     "(expected %i, found %i)\n",
10093 		     encoder->connectors_active, active);
10094 
10095 		if (!encoder->base.crtc)
10096 			continue;
10097 
10098 		tracked_pipe = to_intel_crtc(encoder->base.crtc)->pipe;
10099 		WARN(active && pipe != tracked_pipe,
10100 		     "active encoder's pipe doesn't match"
10101 		     "(expected %i, found %i)\n",
10102 		     tracked_pipe, pipe);
10103 
10104 	}
10105 }
10106 
10107 static void
10108 check_crtc_state(struct drm_device *dev)
10109 {
10110 	struct drm_i915_private *dev_priv = dev->dev_private;
10111 	struct intel_crtc *crtc;
10112 	struct intel_encoder *encoder;
10113 	struct intel_crtc_config pipe_config;
10114 
10115 	for_each_intel_crtc(dev, crtc) {
10116 		bool enabled = false;
10117 		bool active = false;
10118 
10119 		memset(&pipe_config, 0, sizeof(pipe_config));
10120 
10121 		DRM_DEBUG_KMS("[CRTC:%d]\n",
10122 			      crtc->base.base.id);
10123 
10124 		WARN(crtc->active && !crtc->base.enabled,
10125 		     "active crtc, but not enabled in sw tracking\n");
10126 
10127 		list_for_each_entry(encoder, &dev->mode_config.encoder_list,
10128 				    base.head) {
10129 			if (encoder->base.crtc != &crtc->base)
10130 				continue;
10131 			enabled = true;
10132 			if (encoder->connectors_active)
10133 				active = true;
10134 		}
10135 
10136 		WARN(active != crtc->active,
10137 		     "crtc's computed active state doesn't match tracked active state "
10138 		     "(expected %i, found %i)\n", active, crtc->active);
10139 		WARN(enabled != crtc->base.enabled,
10140 		     "crtc's computed enabled state doesn't match tracked enabled state "
10141 		     "(expected %i, found %i)\n", enabled, crtc->base.enabled);
10142 
10143 		active = dev_priv->display.get_pipe_config(crtc,
10144 							   &pipe_config);
10145 
10146 		/* hw state is inconsistent with the pipe A quirk */
10147 		if (crtc->pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE)
10148 			active = crtc->active;
10149 
10150 		list_for_each_entry(encoder, &dev->mode_config.encoder_list,
10151 				    base.head) {
10152 			enum i915_pipe pipe;
10153 			if (encoder->base.crtc != &crtc->base)
10154 				continue;
10155 			if (encoder->get_hw_state(encoder, &pipe))
10156 				encoder->get_config(encoder, &pipe_config);
10157 		}
10158 
10159 		WARN(crtc->active != active,
10160 		     "crtc active state doesn't match with hw state "
10161 		     "(expected %i, found %i)\n", crtc->active, active);
10162 
10163 		if (active &&
10164 		    !intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
10165 			WARN(1, "pipe state doesn't match!\n");
10166 			intel_dump_pipe_config(crtc, &pipe_config,
10167 					       "[hw state]");
10168 			intel_dump_pipe_config(crtc, &crtc->config,
10169 					       "[sw state]");
10170 		}
10171 	}
10172 }
10173 
10174 static void
10175 check_shared_dpll_state(struct drm_device *dev)
10176 {
10177 	struct drm_i915_private *dev_priv = dev->dev_private;
10178 	struct intel_crtc *crtc;
10179 	struct intel_dpll_hw_state dpll_hw_state;
10180 	int i;
10181 
10182 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
10183 		struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
10184 		int enabled_crtcs = 0, active_crtcs = 0;
10185 		bool active;
10186 
10187 		memset(&dpll_hw_state, 0, sizeof(dpll_hw_state));
10188 
10189 		DRM_DEBUG_KMS("%s\n", pll->name);
10190 
10191 		active = pll->get_hw_state(dev_priv, pll, &dpll_hw_state);
10192 
10193 		WARN(pll->active > pll->refcount,
10194 		     "more active pll users than references: %i vs %i\n",
10195 		     pll->active, pll->refcount);
10196 		WARN(pll->active && !pll->on,
10197 		     "pll in active use but not on in sw tracking\n");
10198 		WARN(pll->on && !pll->active,
10199 		     "pll in on but not on in use in sw tracking\n");
10200 		WARN(pll->on != active,
10201 		     "pll on state mismatch (expected %i, found %i)\n",
10202 		     pll->on, active);
10203 
10204 		for_each_intel_crtc(dev, crtc) {
10205 			if (crtc->base.enabled && intel_crtc_to_shared_dpll(crtc) == pll)
10206 				enabled_crtcs++;
10207 			if (crtc->active && intel_crtc_to_shared_dpll(crtc) == pll)
10208 				active_crtcs++;
10209 		}
10210 		WARN(pll->active != active_crtcs,
10211 		     "pll active crtcs mismatch (expected %i, found %i)\n",
10212 		     pll->active, active_crtcs);
10213 		WARN(pll->refcount != enabled_crtcs,
10214 		     "pll enabled crtcs mismatch (expected %i, found %i)\n",
10215 		     pll->refcount, enabled_crtcs);
10216 
10217 		WARN(pll->on && memcmp(&pll->hw_state, &dpll_hw_state,
10218 				       sizeof(dpll_hw_state)),
10219 		     "pll hw state mismatch\n");
10220 	}
10221 }
10222 
10223 void
10224 intel_modeset_check_state(struct drm_device *dev)
10225 {
10226 	check_connector_state(dev);
10227 	check_encoder_state(dev);
10228 	check_crtc_state(dev);
10229 	check_shared_dpll_state(dev);
10230 }
10231 
10232 void ironlake_check_encoder_dotclock(const struct intel_crtc_config *pipe_config,
10233 				     int dotclock)
10234 {
10235 	/*
10236 	 * FDI already provided one idea for the dotclock.
10237 	 * Yell if the encoder disagrees.
10238 	 */
10239 	WARN(!intel_fuzzy_clock_check(pipe_config->adjusted_mode.crtc_clock, dotclock),
10240 	     "FDI dotclock and encoder dotclock mismatch, fdi: %i, encoder: %i\n",
10241 	     pipe_config->adjusted_mode.crtc_clock, dotclock);
10242 }
10243 
10244 static void update_scanline_offset(struct intel_crtc *crtc)
10245 {
10246 	struct drm_device *dev = crtc->base.dev;
10247 
10248 	/*
10249 	 * The scanline counter increments at the leading edge of hsync.
10250 	 *
10251 	 * On most platforms it starts counting from vtotal-1 on the
10252 	 * first active line. That means the scanline counter value is
10253 	 * always one less than what we would expect. Ie. just after
10254 	 * start of vblank, which also occurs at start of hsync (on the
10255 	 * last active line), the scanline counter will read vblank_start-1.
10256 	 *
10257 	 * On gen2 the scanline counter starts counting from 1 instead
10258 	 * of vtotal-1, so we have to subtract one (or rather add vtotal-1
10259 	 * to keep the value positive), instead of adding one.
10260 	 *
10261 	 * On HSW+ the behaviour of the scanline counter depends on the output
10262 	 * type. For DP ports it behaves like most other platforms, but on HDMI
10263 	 * there's an extra 1 line difference. So we need to add two instead of
10264 	 * one to the value.
10265 	 */
10266 	if (IS_GEN2(dev)) {
10267 		const struct drm_display_mode *mode = &crtc->config.adjusted_mode;
10268 		int vtotal;
10269 
10270 		vtotal = mode->crtc_vtotal;
10271 		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
10272 			vtotal /= 2;
10273 
10274 		crtc->scanline_offset = vtotal - 1;
10275 	} else if (HAS_DDI(dev) &&
10276 		   intel_pipe_has_type(&crtc->base, INTEL_OUTPUT_HDMI)) {
10277 		crtc->scanline_offset = 2;
10278 	} else
10279 		crtc->scanline_offset = 1;
10280 }
10281 
10282 static int __intel_set_mode(struct drm_crtc *crtc,
10283 			    struct drm_display_mode *mode,
10284 			    int x, int y, struct drm_framebuffer *fb)
10285 {
10286 	struct drm_device *dev = crtc->dev;
10287 	struct drm_i915_private *dev_priv = dev->dev_private;
10288 	struct drm_display_mode *saved_mode;
10289 	struct intel_crtc_config *pipe_config = NULL;
10290 	struct intel_crtc *intel_crtc;
10291 	unsigned disable_pipes, prepare_pipes, modeset_pipes;
10292 	int ret = 0;
10293 
10294 	saved_mode = kmalloc(sizeof(*saved_mode), M_DRM, M_WAITOK);
10295 	if (!saved_mode)
10296 		return -ENOMEM;
10297 
10298 	intel_modeset_affected_pipes(crtc, &modeset_pipes,
10299 				     &prepare_pipes, &disable_pipes);
10300 
10301 	*saved_mode = crtc->mode;
10302 
10303 	/* Hack: Because we don't (yet) support global modeset on multiple
10304 	 * crtcs, we don't keep track of the new mode for more than one crtc.
10305 	 * Hence simply check whether any bit is set in modeset_pipes in all the
10306 	 * pieces of code that are not yet converted to deal with mutliple crtcs
10307 	 * changing their mode at the same time. */
10308 	if (modeset_pipes) {
10309 		pipe_config = intel_modeset_pipe_config(crtc, fb, mode);
10310 		if (IS_ERR(pipe_config)) {
10311 			ret = PTR_ERR(pipe_config);
10312 			pipe_config = NULL;
10313 
10314 			goto out;
10315 		}
10316 		intel_dump_pipe_config(to_intel_crtc(crtc), pipe_config,
10317 				       "[modeset]");
10318 		to_intel_crtc(crtc)->new_config = pipe_config;
10319 	}
10320 
10321 	/*
10322 	 * See if the config requires any additional preparation, e.g.
10323 	 * to adjust global state with pipes off.  We need to do this
10324 	 * here so we can get the modeset_pipe updated config for the new
10325 	 * mode set on this crtc.  For other crtcs we need to use the
10326 	 * adjusted_mode bits in the crtc directly.
10327 	 */
10328 	if (IS_VALLEYVIEW(dev)) {
10329 		valleyview_modeset_global_pipes(dev, &prepare_pipes);
10330 
10331 		/* may have added more to prepare_pipes than we should */
10332 		prepare_pipes &= ~disable_pipes;
10333 	}
10334 
10335 	for_each_intel_crtc_masked(dev, disable_pipes, intel_crtc)
10336 		intel_crtc_disable(&intel_crtc->base);
10337 
10338 	for_each_intel_crtc_masked(dev, prepare_pipes, intel_crtc) {
10339 		if (intel_crtc->base.enabled)
10340 			dev_priv->display.crtc_disable(&intel_crtc->base);
10341 	}
10342 
10343 	/* crtc->mode is already used by the ->mode_set callbacks, hence we need
10344 	 * to set it here already despite that we pass it down the callchain.
10345 	 */
10346 	if (modeset_pipes) {
10347 		crtc->mode = *mode;
10348 		/* mode_set/enable/disable functions rely on a correct pipe
10349 		 * config. */
10350 		to_intel_crtc(crtc)->config = *pipe_config;
10351 		to_intel_crtc(crtc)->new_config = &to_intel_crtc(crtc)->config;
10352 
10353 		/*
10354 		 * Calculate and store various constants which
10355 		 * are later needed by vblank and swap-completion
10356 		 * timestamping. They are derived from true hwmode.
10357 		 */
10358 		drm_calc_timestamping_constants(crtc,
10359 						&pipe_config->adjusted_mode);
10360 	}
10361 
10362 	/* Only after disabling all output pipelines that will be changed can we
10363 	 * update the the output configuration. */
10364 	intel_modeset_update_state(dev, prepare_pipes);
10365 
10366 	if (dev_priv->display.modeset_global_resources)
10367 		dev_priv->display.modeset_global_resources(dev);
10368 
10369 	/* Set up the DPLL and any encoders state that needs to adjust or depend
10370 	 * on the DPLL.
10371 	 */
10372 	for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
10373 		struct drm_framebuffer *old_fb;
10374 
10375 		mutex_lock(&dev->struct_mutex);
10376 		ret = intel_pin_and_fence_fb_obj(dev,
10377 						 to_intel_framebuffer(fb)->obj,
10378 						 NULL);
10379 		if (ret != 0) {
10380 			DRM_ERROR("pin & fence failed\n");
10381 			mutex_unlock(&dev->struct_mutex);
10382 			goto done;
10383 		}
10384 		old_fb = crtc->primary->fb;
10385 		if (old_fb)
10386 			intel_unpin_fb_obj(to_intel_framebuffer(old_fb)->obj);
10387 		mutex_unlock(&dev->struct_mutex);
10388 
10389 		crtc->primary->fb = fb;
10390 		crtc->x = x;
10391 		crtc->y = y;
10392 
10393 		ret = dev_priv->display.crtc_mode_set(&intel_crtc->base,
10394 						      x, y, fb);
10395 		if (ret)
10396 			goto done;
10397 	}
10398 
10399 	/* Now enable the clocks, plane, pipe, and connectors that we set up. */
10400 	for_each_intel_crtc_masked(dev, prepare_pipes, intel_crtc) {
10401 		update_scanline_offset(intel_crtc);
10402 
10403 		dev_priv->display.crtc_enable(&intel_crtc->base);
10404 	}
10405 
10406 	/* FIXME: add subpixel order */
10407 done:
10408 	if (ret && crtc->enabled)
10409 		crtc->mode = *saved_mode;
10410 
10411 out:
10412 	kfree(pipe_config);
10413 	kfree(saved_mode);
10414 	return ret;
10415 }
10416 
10417 static int intel_set_mode(struct drm_crtc *crtc,
10418 			  struct drm_display_mode *mode,
10419 			  int x, int y, struct drm_framebuffer *fb)
10420 {
10421 	int ret;
10422 
10423 	ret = __intel_set_mode(crtc, mode, x, y, fb);
10424 
10425 	if (ret == 0)
10426 		intel_modeset_check_state(crtc->dev);
10427 
10428 	return ret;
10429 }
10430 
10431 void intel_crtc_restore_mode(struct drm_crtc *crtc)
10432 {
10433 	intel_set_mode(crtc, &crtc->mode, crtc->x, crtc->y, crtc->primary->fb);
10434 }
10435 
10436 #undef for_each_intel_crtc_masked
10437 
10438 static void intel_set_config_free(struct intel_set_config *config)
10439 {
10440 	if (!config)
10441 		return;
10442 
10443 	kfree(config->save_connector_encoders);
10444 	kfree(config->save_encoder_crtcs);
10445 	kfree(config->save_crtc_enabled);
10446 	kfree(config);
10447 }
10448 
10449 static int intel_set_config_save_state(struct drm_device *dev,
10450 				       struct intel_set_config *config)
10451 {
10452 	struct drm_crtc *crtc;
10453 	struct drm_encoder *encoder;
10454 	struct drm_connector *connector;
10455 	int count;
10456 
10457 	config->save_crtc_enabled =
10458 		kcalloc(dev->mode_config.num_crtc,
10459 			sizeof(bool), GFP_KERNEL);
10460 	if (!config->save_crtc_enabled)
10461 		return -ENOMEM;
10462 
10463 	config->save_encoder_crtcs =
10464 		kcalloc(dev->mode_config.num_encoder,
10465 			sizeof(struct drm_crtc *), GFP_KERNEL);
10466 	if (!config->save_encoder_crtcs)
10467 		return -ENOMEM;
10468 
10469 	config->save_connector_encoders =
10470 		kcalloc(dev->mode_config.num_connector,
10471 			sizeof(struct drm_encoder *), GFP_KERNEL);
10472 	if (!config->save_connector_encoders)
10473 		return -ENOMEM;
10474 
10475 	/* Copy data. Note that driver private data is not affected.
10476 	 * Should anything bad happen only the expected state is
10477 	 * restored, not the drivers personal bookkeeping.
10478 	 */
10479 	count = 0;
10480 	for_each_crtc(dev, crtc) {
10481 		config->save_crtc_enabled[count++] = crtc->enabled;
10482 	}
10483 
10484 	count = 0;
10485 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
10486 		config->save_encoder_crtcs[count++] = encoder->crtc;
10487 	}
10488 
10489 	count = 0;
10490 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
10491 		config->save_connector_encoders[count++] = connector->encoder;
10492 	}
10493 
10494 	return 0;
10495 }
10496 
10497 static void intel_set_config_restore_state(struct drm_device *dev,
10498 					   struct intel_set_config *config)
10499 {
10500 	struct intel_crtc *crtc;
10501 	struct intel_encoder *encoder;
10502 	struct intel_connector *connector;
10503 	int count;
10504 
10505 	count = 0;
10506 	for_each_intel_crtc(dev, crtc) {
10507 		crtc->new_enabled = config->save_crtc_enabled[count++];
10508 
10509 		if (crtc->new_enabled)
10510 			crtc->new_config = &crtc->config;
10511 		else
10512 			crtc->new_config = NULL;
10513 	}
10514 
10515 	count = 0;
10516 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
10517 		encoder->new_crtc =
10518 			to_intel_crtc(config->save_encoder_crtcs[count++]);
10519 	}
10520 
10521 	count = 0;
10522 	list_for_each_entry(connector, &dev->mode_config.connector_list, base.head) {
10523 		connector->new_encoder =
10524 			to_intel_encoder(config->save_connector_encoders[count++]);
10525 	}
10526 }
10527 
10528 static bool
10529 is_crtc_connector_off(struct drm_mode_set *set)
10530 {
10531 	int i;
10532 
10533 	if (set->num_connectors == 0)
10534 		return false;
10535 
10536 	if (WARN_ON(set->connectors == NULL))
10537 		return false;
10538 
10539 	for (i = 0; i < set->num_connectors; i++)
10540 		if (set->connectors[i]->encoder &&
10541 		    set->connectors[i]->encoder->crtc == set->crtc &&
10542 		    set->connectors[i]->dpms != DRM_MODE_DPMS_ON)
10543 			return true;
10544 
10545 	return false;
10546 }
10547 
10548 static void
10549 intel_set_config_compute_mode_changes(struct drm_mode_set *set,
10550 				      struct intel_set_config *config)
10551 {
10552 
10553 	/* We should be able to check here if the fb has the same properties
10554 	 * and then just flip_or_move it */
10555 	if (is_crtc_connector_off(set)) {
10556 		config->mode_changed = true;
10557 	} else if (set->crtc->primary->fb != set->fb) {
10558 		/* If we have no fb then treat it as a full mode set */
10559 		if (set->crtc->primary->fb == NULL) {
10560 			struct intel_crtc *intel_crtc =
10561 				to_intel_crtc(set->crtc);
10562 
10563 			if (intel_crtc->active && i915.fastboot) {
10564 				DRM_DEBUG_KMS("crtc has no fb, will flip\n");
10565 				config->fb_changed = true;
10566 			} else {
10567 				DRM_DEBUG_KMS("inactive crtc, full mode set\n");
10568 				config->mode_changed = true;
10569 			}
10570 		} else if (set->fb == NULL) {
10571 			config->mode_changed = true;
10572 		} else if (set->fb->pixel_format !=
10573 			   set->crtc->primary->fb->pixel_format) {
10574 			config->mode_changed = true;
10575 		} else {
10576 			config->fb_changed = true;
10577 		}
10578 	}
10579 
10580 	if (set->fb && (set->x != set->crtc->x || set->y != set->crtc->y))
10581 		config->fb_changed = true;
10582 
10583 	if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) {
10584 		DRM_DEBUG_KMS("modes are different, full mode set\n");
10585 		drm_mode_debug_printmodeline(&set->crtc->mode);
10586 		drm_mode_debug_printmodeline(set->mode);
10587 		config->mode_changed = true;
10588 	}
10589 
10590 	DRM_DEBUG_KMS("computed changes for [CRTC:%d], mode_changed=%d, fb_changed=%d\n",
10591 			set->crtc->base.id, config->mode_changed, config->fb_changed);
10592 }
10593 
10594 static int
10595 intel_modeset_stage_output_state(struct drm_device *dev,
10596 				 struct drm_mode_set *set,
10597 				 struct intel_set_config *config)
10598 {
10599 	struct intel_connector *connector;
10600 	struct intel_encoder *encoder;
10601 	struct intel_crtc *crtc;
10602 	int ro;
10603 
10604 	/* The upper layers ensure that we either disable a crtc or have a list
10605 	 * of connectors. For paranoia, double-check this. */
10606 	WARN_ON(!set->fb && (set->num_connectors != 0));
10607 	WARN_ON(set->fb && (set->num_connectors == 0));
10608 
10609 	list_for_each_entry(connector, &dev->mode_config.connector_list,
10610 			    base.head) {
10611 		/* Otherwise traverse passed in connector list and get encoders
10612 		 * for them. */
10613 		for (ro = 0; ro < set->num_connectors; ro++) {
10614 			if (set->connectors[ro] == &connector->base) {
10615 				connector->new_encoder = connector->encoder;
10616 				break;
10617 			}
10618 		}
10619 
10620 		/* If we disable the crtc, disable all its connectors. Also, if
10621 		 * the connector is on the changing crtc but not on the new
10622 		 * connector list, disable it. */
10623 		if ((!set->fb || ro == set->num_connectors) &&
10624 		    connector->base.encoder &&
10625 		    connector->base.encoder->crtc == set->crtc) {
10626 			connector->new_encoder = NULL;
10627 
10628 			DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [NOCRTC]\n",
10629 				connector->base.base.id,
10630 				connector->base.name);
10631 		}
10632 
10633 
10634 		if (&connector->new_encoder->base != connector->base.encoder) {
10635 			DRM_DEBUG_KMS("encoder changed, full mode switch\n");
10636 			config->mode_changed = true;
10637 		}
10638 	}
10639 	/* connector->new_encoder is now updated for all connectors. */
10640 
10641 	/* Update crtc of enabled connectors. */
10642 	list_for_each_entry(connector, &dev->mode_config.connector_list,
10643 			    base.head) {
10644 		struct drm_crtc *new_crtc;
10645 
10646 		if (!connector->new_encoder)
10647 			continue;
10648 
10649 		new_crtc = connector->new_encoder->base.crtc;
10650 
10651 		for (ro = 0; ro < set->num_connectors; ro++) {
10652 			if (set->connectors[ro] == &connector->base)
10653 				new_crtc = set->crtc;
10654 		}
10655 
10656 		/* Make sure the new CRTC will work with the encoder */
10657 		if (!drm_encoder_crtc_ok(&connector->new_encoder->base,
10658 					 new_crtc)) {
10659 			return -EINVAL;
10660 		}
10661 		connector->encoder->new_crtc = to_intel_crtc(new_crtc);
10662 
10663 		DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [CRTC:%d]\n",
10664 			connector->base.base.id,
10665 			connector->base.name,
10666 			new_crtc->base.id);
10667 	}
10668 
10669 	/* Check for any encoders that needs to be disabled. */
10670 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
10671 			    base.head) {
10672 		int num_connectors = 0;
10673 		list_for_each_entry(connector,
10674 				    &dev->mode_config.connector_list,
10675 				    base.head) {
10676 			if (connector->new_encoder == encoder) {
10677 				WARN_ON(!connector->new_encoder->new_crtc);
10678 				num_connectors++;
10679 			}
10680 		}
10681 
10682 		if (num_connectors == 0)
10683 			encoder->new_crtc = NULL;
10684 		else if (num_connectors > 1)
10685 			return -EINVAL;
10686 
10687 		/* Only now check for crtc changes so we don't miss encoders
10688 		 * that will be disabled. */
10689 		if (&encoder->new_crtc->base != encoder->base.crtc) {
10690 			DRM_DEBUG_KMS("crtc changed, full mode switch\n");
10691 			config->mode_changed = true;
10692 		}
10693 	}
10694 	/* Now we've also updated encoder->new_crtc for all encoders. */
10695 
10696 	for_each_intel_crtc(dev, crtc) {
10697 		crtc->new_enabled = false;
10698 
10699 		list_for_each_entry(encoder,
10700 				    &dev->mode_config.encoder_list,
10701 				    base.head) {
10702 			if (encoder->new_crtc == crtc) {
10703 				crtc->new_enabled = true;
10704 				break;
10705 			}
10706 		}
10707 
10708 		if (crtc->new_enabled != crtc->base.enabled) {
10709 			DRM_DEBUG_KMS("crtc %sabled, full mode switch\n",
10710 				      crtc->new_enabled ? "en" : "dis");
10711 			config->mode_changed = true;
10712 		}
10713 
10714 		if (crtc->new_enabled)
10715 			crtc->new_config = &crtc->config;
10716 		else
10717 			crtc->new_config = NULL;
10718 	}
10719 
10720 	return 0;
10721 }
10722 
10723 static void disable_crtc_nofb(struct intel_crtc *crtc)
10724 {
10725 	struct drm_device *dev = crtc->base.dev;
10726 	struct intel_encoder *encoder;
10727 	struct intel_connector *connector;
10728 
10729 	DRM_DEBUG_KMS("Trying to restore without FB -> disabling pipe %c\n",
10730 		      pipe_name(crtc->pipe));
10731 
10732 	list_for_each_entry(connector, &dev->mode_config.connector_list, base.head) {
10733 		if (connector->new_encoder &&
10734 		    connector->new_encoder->new_crtc == crtc)
10735 			connector->new_encoder = NULL;
10736 	}
10737 
10738 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
10739 		if (encoder->new_crtc == crtc)
10740 			encoder->new_crtc = NULL;
10741 	}
10742 
10743 	crtc->new_enabled = false;
10744 	crtc->new_config = NULL;
10745 }
10746 
10747 static int intel_crtc_set_config(struct drm_mode_set *set)
10748 {
10749 	struct drm_device *dev;
10750 	struct drm_mode_set save_set;
10751 	struct intel_set_config *config;
10752 	int ret;
10753 
10754 	BUG_ON(!set);
10755 	BUG_ON(!set->crtc);
10756 	BUG_ON(!set->crtc->helper_private);
10757 
10758 	/* Enforce sane interface api - has been abused by the fb helper. */
10759 	BUG_ON(!set->mode && set->fb);
10760 	BUG_ON(set->fb && set->num_connectors == 0);
10761 
10762 	if (set->fb) {
10763 		DRM_DEBUG_KMS("[CRTC:%d] [FB:%d] #connectors=%d (x y) (%i %i)\n",
10764 				set->crtc->base.id, set->fb->base.id,
10765 				(int)set->num_connectors, set->x, set->y);
10766 	} else {
10767 		DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id);
10768 	}
10769 
10770 	dev = set->crtc->dev;
10771 
10772 	ret = -ENOMEM;
10773 	config = kzalloc(sizeof(*config), GFP_KERNEL);
10774 	if (!config)
10775 		goto out_config;
10776 
10777 	ret = intel_set_config_save_state(dev, config);
10778 	if (ret)
10779 		goto out_config;
10780 
10781 	save_set.crtc = set->crtc;
10782 	save_set.mode = &set->crtc->mode;
10783 	save_set.x = set->crtc->x;
10784 	save_set.y = set->crtc->y;
10785 	save_set.fb = set->crtc->primary->fb;
10786 
10787 	/* Compute whether we need a full modeset, only an fb base update or no
10788 	 * change at all. In the future we might also check whether only the
10789 	 * mode changed, e.g. for LVDS where we only change the panel fitter in
10790 	 * such cases. */
10791 	intel_set_config_compute_mode_changes(set, config);
10792 
10793 	ret = intel_modeset_stage_output_state(dev, set, config);
10794 	if (ret)
10795 		goto fail;
10796 
10797 	if (config->mode_changed) {
10798 		ret = intel_set_mode(set->crtc, set->mode,
10799 				     set->x, set->y, set->fb);
10800 	} else if (config->fb_changed) {
10801 		intel_crtc_wait_for_pending_flips(set->crtc);
10802 
10803 		ret = intel_pipe_set_base(set->crtc,
10804 					  set->x, set->y, set->fb);
10805 		/*
10806 		 * In the fastboot case this may be our only check of the
10807 		 * state after boot.  It would be better to only do it on
10808 		 * the first update, but we don't have a nice way of doing that
10809 		 * (and really, set_config isn't used much for high freq page
10810 		 * flipping, so increasing its cost here shouldn't be a big
10811 		 * deal).
10812 		 */
10813 		if (i915.fastboot && ret == 0)
10814 			intel_modeset_check_state(set->crtc->dev);
10815 	}
10816 
10817 	if (ret) {
10818 		DRM_DEBUG_KMS("failed to set mode on [CRTC:%d], err = %d\n",
10819 			      set->crtc->base.id, ret);
10820 fail:
10821 		intel_set_config_restore_state(dev, config);
10822 
10823 		/*
10824 		 * HACK: if the pipe was on, but we didn't have a framebuffer,
10825 		 * force the pipe off to avoid oopsing in the modeset code
10826 		 * due to fb==NULL. This should only happen during boot since
10827 		 * we don't yet reconstruct the FB from the hardware state.
10828 		 */
10829 		if (to_intel_crtc(save_set.crtc)->new_enabled && !save_set.fb)
10830 			disable_crtc_nofb(to_intel_crtc(save_set.crtc));
10831 
10832 		/* Try to restore the config */
10833 		if (config->mode_changed &&
10834 		    intel_set_mode(save_set.crtc, save_set.mode,
10835 				   save_set.x, save_set.y, save_set.fb))
10836 			DRM_ERROR("failed to restore config after modeset failure\n");
10837 	}
10838 
10839 out_config:
10840 	intel_set_config_free(config);
10841 	return ret;
10842 }
10843 
10844 static const struct drm_crtc_funcs intel_crtc_funcs = {
10845 	.cursor_set = intel_crtc_cursor_set,
10846 	.cursor_move = intel_crtc_cursor_move,
10847 	.gamma_set = intel_crtc_gamma_set,
10848 	.set_config = intel_crtc_set_config,
10849 	.destroy = intel_crtc_destroy,
10850 	.page_flip = intel_crtc_page_flip,
10851 };
10852 
10853 static void intel_cpu_pll_init(struct drm_device *dev)
10854 {
10855 	if (HAS_DDI(dev))
10856 		intel_ddi_pll_init(dev);
10857 }
10858 
10859 static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv,
10860 				      struct intel_shared_dpll *pll,
10861 				      struct intel_dpll_hw_state *hw_state)
10862 {
10863 	uint32_t val;
10864 
10865 	val = I915_READ(PCH_DPLL(pll->id));
10866 	hw_state->dpll = val;
10867 	hw_state->fp0 = I915_READ(PCH_FP0(pll->id));
10868 	hw_state->fp1 = I915_READ(PCH_FP1(pll->id));
10869 
10870 	return val & DPLL_VCO_ENABLE;
10871 }
10872 
10873 static void ibx_pch_dpll_mode_set(struct drm_i915_private *dev_priv,
10874 				  struct intel_shared_dpll *pll)
10875 {
10876 	I915_WRITE(PCH_FP0(pll->id), pll->hw_state.fp0);
10877 	I915_WRITE(PCH_FP1(pll->id), pll->hw_state.fp1);
10878 }
10879 
10880 static void ibx_pch_dpll_enable(struct drm_i915_private *dev_priv,
10881 				struct intel_shared_dpll *pll)
10882 {
10883 	/* PCH refclock must be enabled first */
10884 	ibx_assert_pch_refclk_enabled(dev_priv);
10885 
10886 	I915_WRITE(PCH_DPLL(pll->id), pll->hw_state.dpll);
10887 
10888 	/* Wait for the clocks to stabilize. */
10889 	POSTING_READ(PCH_DPLL(pll->id));
10890 	udelay(150);
10891 
10892 	/* The pixel multiplier can only be updated once the
10893 	 * DPLL is enabled and the clocks are stable.
10894 	 *
10895 	 * So write it again.
10896 	 */
10897 	I915_WRITE(PCH_DPLL(pll->id), pll->hw_state.dpll);
10898 	POSTING_READ(PCH_DPLL(pll->id));
10899 	udelay(200);
10900 }
10901 
10902 static void ibx_pch_dpll_disable(struct drm_i915_private *dev_priv,
10903 				 struct intel_shared_dpll *pll)
10904 {
10905 	struct drm_device *dev = dev_priv->dev;
10906 	struct intel_crtc *crtc;
10907 
10908 	/* Make sure no transcoder isn't still depending on us. */
10909 	for_each_intel_crtc(dev, crtc) {
10910 		if (intel_crtc_to_shared_dpll(crtc) == pll)
10911 			assert_pch_transcoder_disabled(dev_priv, crtc->pipe);
10912 	}
10913 
10914 	I915_WRITE(PCH_DPLL(pll->id), 0);
10915 	POSTING_READ(PCH_DPLL(pll->id));
10916 	udelay(200);
10917 }
10918 
10919 static char *ibx_pch_dpll_names[] = {
10920 	"PCH DPLL A",
10921 	"PCH DPLL B",
10922 };
10923 
10924 static void ibx_pch_dpll_init(struct drm_device *dev)
10925 {
10926 	struct drm_i915_private *dev_priv = dev->dev_private;
10927 	int i;
10928 
10929 	dev_priv->num_shared_dpll = 2;
10930 
10931 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
10932 		dev_priv->shared_dplls[i].id = i;
10933 		dev_priv->shared_dplls[i].name = ibx_pch_dpll_names[i];
10934 		dev_priv->shared_dplls[i].mode_set = ibx_pch_dpll_mode_set;
10935 		dev_priv->shared_dplls[i].enable = ibx_pch_dpll_enable;
10936 		dev_priv->shared_dplls[i].disable = ibx_pch_dpll_disable;
10937 		dev_priv->shared_dplls[i].get_hw_state =
10938 			ibx_pch_dpll_get_hw_state;
10939 	}
10940 }
10941 
10942 static void intel_shared_dpll_init(struct drm_device *dev)
10943 {
10944 	struct drm_i915_private *dev_priv = dev->dev_private;
10945 
10946 	if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev))
10947 		ibx_pch_dpll_init(dev);
10948 	else
10949 		dev_priv->num_shared_dpll = 0;
10950 
10951 	BUG_ON(dev_priv->num_shared_dpll > I915_NUM_PLLS);
10952 }
10953 
10954 static void intel_crtc_init(struct drm_device *dev, int pipe)
10955 {
10956 	struct drm_i915_private *dev_priv = dev->dev_private;
10957 	struct intel_crtc *intel_crtc;
10958 	int i;
10959 
10960 	intel_crtc = kzalloc(sizeof(*intel_crtc), GFP_KERNEL);
10961 	if (intel_crtc == NULL)
10962 		return;
10963 
10964 	drm_crtc_init(dev, &intel_crtc->base, &intel_crtc_funcs);
10965 
10966 	drm_mode_crtc_set_gamma_size(&intel_crtc->base, 256);
10967 	for (i = 0; i < 256; i++) {
10968 		intel_crtc->lut_r[i] = i;
10969 		intel_crtc->lut_g[i] = i;
10970 		intel_crtc->lut_b[i] = i;
10971 	}
10972 
10973 	/*
10974 	 * On gen2/3 only plane A can do fbc, but the panel fitter and lvds port
10975 	 * is hooked to plane B. Hence we want plane A feeding pipe B.
10976 	 */
10977 	intel_crtc->pipe = pipe;
10978 	intel_crtc->plane = pipe;
10979 	if (HAS_FBC(dev) && INTEL_INFO(dev)->gen < 4) {
10980 		DRM_DEBUG_KMS("swapping pipes & planes for FBC\n");
10981 		intel_crtc->plane = !pipe;
10982 	}
10983 
10984 	intel_crtc->cursor_base = ~0;
10985 	intel_crtc->cursor_cntl = ~0;
10986 
10987 	init_waitqueue_head(&intel_crtc->vbl_wait);
10988 
10989 	BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) ||
10990 	       dev_priv->plane_to_crtc_mapping[intel_crtc->plane] != NULL);
10991 	dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = &intel_crtc->base;
10992 	dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
10993 
10994 	drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
10995 
10996 	WARN_ON(drm_crtc_index(&intel_crtc->base) != intel_crtc->pipe);
10997 }
10998 
10999 enum i915_pipe intel_get_pipe_from_connector(struct intel_connector *connector)
11000 {
11001 	struct drm_encoder *encoder = connector->base.encoder;
11002 	struct drm_device *dev = connector->base.dev;
11003 
11004 	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
11005 
11006 	if (!encoder)
11007 		return INVALID_PIPE;
11008 
11009 	return to_intel_crtc(encoder->crtc)->pipe;
11010 }
11011 
11012 int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
11013 				struct drm_file *file)
11014 {
11015 	struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
11016 	struct drm_mode_object *drmmode_obj;
11017 	struct intel_crtc *crtc;
11018 
11019 	if (!drm_core_check_feature(dev, DRIVER_MODESET))
11020 		return -ENODEV;
11021 
11022 	drmmode_obj = drm_mode_object_find(dev, pipe_from_crtc_id->crtc_id,
11023 			DRM_MODE_OBJECT_CRTC);
11024 
11025 	if (!drmmode_obj) {
11026 		DRM_ERROR("no such CRTC id\n");
11027 		return -ENOENT;
11028 	}
11029 
11030 	crtc = to_intel_crtc(obj_to_crtc(drmmode_obj));
11031 	pipe_from_crtc_id->pipe = crtc->pipe;
11032 
11033 	return 0;
11034 }
11035 
11036 static int intel_encoder_clones(struct intel_encoder *encoder)
11037 {
11038 	struct drm_device *dev = encoder->base.dev;
11039 	struct intel_encoder *source_encoder;
11040 	int index_mask = 0;
11041 	int entry = 0;
11042 
11043 	list_for_each_entry(source_encoder,
11044 			    &dev->mode_config.encoder_list, base.head) {
11045 		if (encoders_cloneable(encoder, source_encoder))
11046 			index_mask |= (1 << entry);
11047 
11048 		entry++;
11049 	}
11050 
11051 	return index_mask;
11052 }
11053 
11054 static bool has_edp_a(struct drm_device *dev)
11055 {
11056 	struct drm_i915_private *dev_priv = dev->dev_private;
11057 
11058 	if (!IS_MOBILE(dev))
11059 		return false;
11060 
11061 	if ((I915_READ(DP_A) & DP_DETECTED) == 0)
11062 		return false;
11063 
11064 	if (IS_GEN5(dev) && (I915_READ(FUSE_STRAP) & ILK_eDP_A_DISABLE))
11065 		return false;
11066 
11067 	return true;
11068 }
11069 
11070 const char *intel_output_name(int output)
11071 {
11072 	static const char *names[] = {
11073 		[INTEL_OUTPUT_UNUSED] = "Unused",
11074 		[INTEL_OUTPUT_ANALOG] = "Analog",
11075 		[INTEL_OUTPUT_DVO] = "DVO",
11076 		[INTEL_OUTPUT_SDVO] = "SDVO",
11077 		[INTEL_OUTPUT_LVDS] = "LVDS",
11078 		[INTEL_OUTPUT_TVOUT] = "TV",
11079 		[INTEL_OUTPUT_HDMI] = "HDMI",
11080 		[INTEL_OUTPUT_DISPLAYPORT] = "DisplayPort",
11081 		[INTEL_OUTPUT_EDP] = "eDP",
11082 		[INTEL_OUTPUT_DSI] = "DSI",
11083 		[INTEL_OUTPUT_UNKNOWN] = "Unknown",
11084 	};
11085 
11086 	if (output < 0 || output >= ARRAY_SIZE(names) || !names[output])
11087 		return "Invalid";
11088 
11089 	return names[output];
11090 }
11091 
11092 static bool intel_crt_present(struct drm_device *dev)
11093 {
11094 	struct drm_i915_private *dev_priv = dev->dev_private;
11095 
11096 	if (IS_ULT(dev))
11097 		return false;
11098 
11099 	if (IS_CHERRYVIEW(dev))
11100 		return false;
11101 
11102 	if (IS_VALLEYVIEW(dev) && !dev_priv->vbt.int_crt_support)
11103 		return false;
11104 
11105 	return true;
11106 }
11107 
11108 static void intel_setup_outputs(struct drm_device *dev)
11109 {
11110 	struct drm_i915_private *dev_priv = dev->dev_private;
11111 	struct intel_encoder *encoder;
11112 	bool dpd_is_edp = false;
11113 
11114 	intel_lvds_init(dev);
11115 
11116 	if (intel_crt_present(dev))
11117 		intel_crt_init(dev);
11118 
11119 	if (HAS_DDI(dev)) {
11120 		int found;
11121 
11122 		/* Haswell uses DDI functions to detect digital outputs */
11123 		found = I915_READ(DDI_BUF_CTL_A) & DDI_INIT_DISPLAY_DETECTED;
11124 		/* DDI A only supports eDP */
11125 		if (found)
11126 			intel_ddi_init(dev, PORT_A);
11127 
11128 		/* DDI B, C and D detection is indicated by the SFUSE_STRAP
11129 		 * register */
11130 		found = I915_READ(SFUSE_STRAP);
11131 
11132 		if (found & SFUSE_STRAP_DDIB_DETECTED)
11133 			intel_ddi_init(dev, PORT_B);
11134 		if (found & SFUSE_STRAP_DDIC_DETECTED)
11135 			intel_ddi_init(dev, PORT_C);
11136 		if (found & SFUSE_STRAP_DDID_DETECTED)
11137 			intel_ddi_init(dev, PORT_D);
11138 	} else if (HAS_PCH_SPLIT(dev)) {
11139 		int found;
11140 		dpd_is_edp = intel_dp_is_edp(dev, PORT_D);
11141 
11142 		if (has_edp_a(dev))
11143 			intel_dp_init(dev, DP_A, PORT_A);
11144 
11145 		if (I915_READ(PCH_HDMIB) & SDVO_DETECTED) {
11146 			/* PCH SDVOB multiplex with HDMIB */
11147 			found = intel_sdvo_init(dev, PCH_SDVOB, true);
11148 			if (!found)
11149 				intel_hdmi_init(dev, PCH_HDMIB, PORT_B);
11150 			if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
11151 				intel_dp_init(dev, PCH_DP_B, PORT_B);
11152 		}
11153 
11154 		if (I915_READ(PCH_HDMIC) & SDVO_DETECTED)
11155 			intel_hdmi_init(dev, PCH_HDMIC, PORT_C);
11156 
11157 		if (!dpd_is_edp && I915_READ(PCH_HDMID) & SDVO_DETECTED)
11158 			intel_hdmi_init(dev, PCH_HDMID, PORT_D);
11159 
11160 		if (I915_READ(PCH_DP_C) & DP_DETECTED)
11161 			intel_dp_init(dev, PCH_DP_C, PORT_C);
11162 
11163 		if (I915_READ(PCH_DP_D) & DP_DETECTED)
11164 			intel_dp_init(dev, PCH_DP_D, PORT_D);
11165 	} else if (IS_VALLEYVIEW(dev)) {
11166 		if (I915_READ(VLV_DISPLAY_BASE + GEN4_HDMIB) & SDVO_DETECTED) {
11167 			intel_hdmi_init(dev, VLV_DISPLAY_BASE + GEN4_HDMIB,
11168 					PORT_B);
11169 			if (I915_READ(VLV_DISPLAY_BASE + DP_B) & DP_DETECTED)
11170 				intel_dp_init(dev, VLV_DISPLAY_BASE + DP_B, PORT_B);
11171 		}
11172 
11173 		if (I915_READ(VLV_DISPLAY_BASE + GEN4_HDMIC) & SDVO_DETECTED) {
11174 			intel_hdmi_init(dev, VLV_DISPLAY_BASE + GEN4_HDMIC,
11175 					PORT_C);
11176 			if (I915_READ(VLV_DISPLAY_BASE + DP_C) & DP_DETECTED)
11177 				intel_dp_init(dev, VLV_DISPLAY_BASE + DP_C, PORT_C);
11178 		}
11179 
11180 		if (IS_CHERRYVIEW(dev)) {
11181 			if (I915_READ(VLV_DISPLAY_BASE + CHV_HDMID) & SDVO_DETECTED) {
11182 				intel_hdmi_init(dev, VLV_DISPLAY_BASE + CHV_HDMID,
11183 						PORT_D);
11184 				if (I915_READ(VLV_DISPLAY_BASE + DP_D) & DP_DETECTED)
11185 					intel_dp_init(dev, VLV_DISPLAY_BASE + DP_D, PORT_D);
11186 			}
11187 		}
11188 
11189 		intel_dsi_init(dev);
11190 	} else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
11191 		bool found = false;
11192 
11193 		if (I915_READ(GEN3_SDVOB) & SDVO_DETECTED) {
11194 			DRM_DEBUG_KMS("probing SDVOB\n");
11195 			found = intel_sdvo_init(dev, GEN3_SDVOB, true);
11196 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) {
11197 				DRM_DEBUG_KMS("probing HDMI on SDVOB\n");
11198 				intel_hdmi_init(dev, GEN4_HDMIB, PORT_B);
11199 			}
11200 
11201 			if (!found && SUPPORTS_INTEGRATED_DP(dev))
11202 				intel_dp_init(dev, DP_B, PORT_B);
11203 		}
11204 
11205 		/* Before G4X SDVOC doesn't have its own detect register */
11206 
11207 		if (I915_READ(GEN3_SDVOB) & SDVO_DETECTED) {
11208 			DRM_DEBUG_KMS("probing SDVOC\n");
11209 			found = intel_sdvo_init(dev, GEN3_SDVOC, false);
11210 		}
11211 
11212 		if (!found && (I915_READ(GEN3_SDVOC) & SDVO_DETECTED)) {
11213 
11214 			if (SUPPORTS_INTEGRATED_HDMI(dev)) {
11215 				DRM_DEBUG_KMS("probing HDMI on SDVOC\n");
11216 				intel_hdmi_init(dev, GEN4_HDMIC, PORT_C);
11217 			}
11218 			if (SUPPORTS_INTEGRATED_DP(dev))
11219 				intel_dp_init(dev, DP_C, PORT_C);
11220 		}
11221 
11222 		if (SUPPORTS_INTEGRATED_DP(dev) &&
11223 		    (I915_READ(DP_D) & DP_DETECTED))
11224 			intel_dp_init(dev, DP_D, PORT_D);
11225 #if 0
11226 	} else if (IS_GEN2(dev))
11227 		intel_dvo_init(dev);
11228 #endif
11229 	}
11230 
11231 	if (SUPPORTS_TV(dev))
11232 		intel_tv_init(dev);
11233 
11234 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
11235 		encoder->base.possible_crtcs = encoder->crtc_mask;
11236 		encoder->base.possible_clones =
11237 			intel_encoder_clones(encoder);
11238 	}
11239 
11240 	intel_init_pch_refclk(dev);
11241 
11242 	drm_helper_move_panel_connectors_to_head(dev);
11243 }
11244 
11245 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
11246 {
11247 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
11248 
11249 	drm_framebuffer_cleanup(fb);
11250 	WARN_ON(!intel_fb->obj->framebuffer_references--);
11251 	drm_gem_object_unreference_unlocked(&intel_fb->obj->base);
11252 	kfree(intel_fb);
11253 }
11254 
11255 static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
11256 						struct drm_file *file,
11257 						unsigned int *handle)
11258 {
11259 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
11260 	struct drm_i915_gem_object *obj = intel_fb->obj;
11261 
11262 	return drm_gem_handle_create(file, &obj->base, handle);
11263 }
11264 
11265 static const struct drm_framebuffer_funcs intel_fb_funcs = {
11266 	.destroy = intel_user_framebuffer_destroy,
11267 	.create_handle = intel_user_framebuffer_create_handle,
11268 };
11269 
11270 static int intel_framebuffer_init(struct drm_device *dev,
11271 				  struct intel_framebuffer *intel_fb,
11272 				  struct drm_mode_fb_cmd2 *mode_cmd,
11273 				  struct drm_i915_gem_object *obj)
11274 {
11275 	int aligned_height;
11276 	int pitch_limit;
11277 	int ret;
11278 
11279 	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
11280 
11281 	if (obj->tiling_mode == I915_TILING_Y) {
11282 		DRM_DEBUG("hardware does not support tiling Y\n");
11283 		return -EINVAL;
11284 	}
11285 
11286 	if (mode_cmd->pitches[0] & 63) {
11287 		DRM_DEBUG("pitch (%d) must be at least 64 byte aligned\n",
11288 			  mode_cmd->pitches[0]);
11289 		return -EINVAL;
11290 	}
11291 
11292 	if (INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev)) {
11293 		pitch_limit = 32*1024;
11294 	} else if (INTEL_INFO(dev)->gen >= 4) {
11295 		if (obj->tiling_mode)
11296 			pitch_limit = 16*1024;
11297 		else
11298 			pitch_limit = 32*1024;
11299 	} else if (INTEL_INFO(dev)->gen >= 3) {
11300 		if (obj->tiling_mode)
11301 			pitch_limit = 8*1024;
11302 		else
11303 			pitch_limit = 16*1024;
11304 	} else
11305 		/* XXX DSPC is limited to 4k tiled */
11306 		pitch_limit = 8*1024;
11307 
11308 	if (mode_cmd->pitches[0] > pitch_limit) {
11309 		DRM_DEBUG("%s pitch (%d) must be at less than %d\n",
11310 			  obj->tiling_mode ? "tiled" : "linear",
11311 			  mode_cmd->pitches[0], pitch_limit);
11312 		return -EINVAL;
11313 	}
11314 
11315 	if (obj->tiling_mode != I915_TILING_NONE &&
11316 	    mode_cmd->pitches[0] != obj->stride) {
11317 		DRM_DEBUG("pitch (%d) must match tiling stride (%d)\n",
11318 			  mode_cmd->pitches[0], obj->stride);
11319 		return -EINVAL;
11320 	}
11321 
11322 	/* Reject formats not supported by any plane early. */
11323 	switch (mode_cmd->pixel_format) {
11324 	case DRM_FORMAT_C8:
11325 	case DRM_FORMAT_RGB565:
11326 	case DRM_FORMAT_XRGB8888:
11327 	case DRM_FORMAT_ARGB8888:
11328 		break;
11329 	case DRM_FORMAT_XRGB1555:
11330 	case DRM_FORMAT_ARGB1555:
11331 		if (INTEL_INFO(dev)->gen > 3) {
11332 			DRM_DEBUG("unsupported pixel format: %s\n",
11333 				  drm_get_format_name(mode_cmd->pixel_format));
11334 			return -EINVAL;
11335 		}
11336 		break;
11337 	case DRM_FORMAT_XBGR8888:
11338 	case DRM_FORMAT_ABGR8888:
11339 	case DRM_FORMAT_XRGB2101010:
11340 	case DRM_FORMAT_ARGB2101010:
11341 	case DRM_FORMAT_XBGR2101010:
11342 	case DRM_FORMAT_ABGR2101010:
11343 		if (INTEL_INFO(dev)->gen < 4) {
11344 			DRM_DEBUG("unsupported pixel format: %s\n",
11345 				  drm_get_format_name(mode_cmd->pixel_format));
11346 			return -EINVAL;
11347 		}
11348 		break;
11349 	case DRM_FORMAT_YUYV:
11350 	case DRM_FORMAT_UYVY:
11351 	case DRM_FORMAT_YVYU:
11352 	case DRM_FORMAT_VYUY:
11353 		if (INTEL_INFO(dev)->gen < 5) {
11354 			DRM_DEBUG("unsupported pixel format: %s\n",
11355 				  drm_get_format_name(mode_cmd->pixel_format));
11356 			return -EINVAL;
11357 		}
11358 		break;
11359 	default:
11360 		DRM_DEBUG("unsupported pixel format: %s\n",
11361 			  drm_get_format_name(mode_cmd->pixel_format));
11362 		return -EINVAL;
11363 	}
11364 
11365 	/* FIXME need to adjust LINOFF/TILEOFF accordingly. */
11366 	if (mode_cmd->offsets[0] != 0)
11367 		return -EINVAL;
11368 
11369 	aligned_height = intel_align_height(dev, mode_cmd->height,
11370 					    obj->tiling_mode);
11371 	/* FIXME drm helper for size checks (especially planar formats)? */
11372 	if (obj->base.size < aligned_height * mode_cmd->pitches[0])
11373 		return -EINVAL;
11374 
11375 	drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd);
11376 	intel_fb->obj = obj;
11377 	intel_fb->obj->framebuffer_references++;
11378 
11379 	ret = drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs);
11380 	if (ret) {
11381 		DRM_ERROR("framebuffer init failed %d\n", ret);
11382 		return ret;
11383 	}
11384 
11385 	return 0;
11386 }
11387 
11388 static struct drm_framebuffer *
11389 intel_user_framebuffer_create(struct drm_device *dev,
11390 			      struct drm_file *filp,
11391 			      struct drm_mode_fb_cmd2 *mode_cmd)
11392 {
11393 	struct drm_i915_gem_object *obj;
11394 
11395 	obj = to_intel_bo(drm_gem_object_lookup(dev, filp,
11396 						mode_cmd->handles[0]));
11397 	if (&obj->base == NULL)
11398 		return ERR_PTR(-ENOENT);
11399 
11400 	return intel_framebuffer_create(dev, mode_cmd, obj);
11401 }
11402 
11403 #ifndef CONFIG_DRM_I915_FBDEV
11404 static inline void intel_fbdev_output_poll_changed(struct drm_device *dev)
11405 {
11406 }
11407 #endif
11408 
11409 static const struct drm_mode_config_funcs intel_mode_funcs = {
11410 	.fb_create = intel_user_framebuffer_create,
11411 	.output_poll_changed = intel_fbdev_output_poll_changed,
11412 };
11413 
11414 /* Set up chip specific display functions */
11415 static void intel_init_display(struct drm_device *dev)
11416 {
11417 	struct drm_i915_private *dev_priv = dev->dev_private;
11418 
11419 	if (HAS_PCH_SPLIT(dev) || IS_G4X(dev))
11420 		dev_priv->display.find_dpll = g4x_find_best_dpll;
11421 	else if (IS_CHERRYVIEW(dev))
11422 		dev_priv->display.find_dpll = chv_find_best_dpll;
11423 	else if (IS_VALLEYVIEW(dev))
11424 		dev_priv->display.find_dpll = vlv_find_best_dpll;
11425 	else if (IS_PINEVIEW(dev))
11426 		dev_priv->display.find_dpll = pnv_find_best_dpll;
11427 	else
11428 		dev_priv->display.find_dpll = i9xx_find_best_dpll;
11429 
11430 	if (HAS_DDI(dev)) {
11431 		dev_priv->display.get_pipe_config = haswell_get_pipe_config;
11432 		dev_priv->display.get_plane_config = ironlake_get_plane_config;
11433 		dev_priv->display.crtc_mode_set = haswell_crtc_mode_set;
11434 		dev_priv->display.crtc_enable = haswell_crtc_enable;
11435 		dev_priv->display.crtc_disable = haswell_crtc_disable;
11436 		dev_priv->display.off = haswell_crtc_off;
11437 		dev_priv->display.update_primary_plane =
11438 			ironlake_update_primary_plane;
11439 	} else if (HAS_PCH_SPLIT(dev)) {
11440 		dev_priv->display.get_pipe_config = ironlake_get_pipe_config;
11441 		dev_priv->display.get_plane_config = ironlake_get_plane_config;
11442 		dev_priv->display.crtc_mode_set = ironlake_crtc_mode_set;
11443 		dev_priv->display.crtc_enable = ironlake_crtc_enable;
11444 		dev_priv->display.crtc_disable = ironlake_crtc_disable;
11445 		dev_priv->display.off = ironlake_crtc_off;
11446 		dev_priv->display.update_primary_plane =
11447 			ironlake_update_primary_plane;
11448 	} else if (IS_VALLEYVIEW(dev)) {
11449 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
11450 		dev_priv->display.get_plane_config = i9xx_get_plane_config;
11451 		dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
11452 		dev_priv->display.crtc_enable = valleyview_crtc_enable;
11453 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
11454 		dev_priv->display.off = i9xx_crtc_off;
11455 		dev_priv->display.update_primary_plane =
11456 			i9xx_update_primary_plane;
11457 	} else {
11458 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
11459 		dev_priv->display.get_plane_config = i9xx_get_plane_config;
11460 		dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
11461 		dev_priv->display.crtc_enable = i9xx_crtc_enable;
11462 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
11463 		dev_priv->display.off = i9xx_crtc_off;
11464 		dev_priv->display.update_primary_plane =
11465 			i9xx_update_primary_plane;
11466 	}
11467 
11468 	/* Returns the core display clock speed */
11469 	if (IS_VALLEYVIEW(dev))
11470 		dev_priv->display.get_display_clock_speed =
11471 			valleyview_get_display_clock_speed;
11472 	else if (IS_I945G(dev) || (IS_G33(dev) && !IS_PINEVIEW_M(dev)))
11473 		dev_priv->display.get_display_clock_speed =
11474 			i945_get_display_clock_speed;
11475 	else if (IS_I915G(dev))
11476 		dev_priv->display.get_display_clock_speed =
11477 			i915_get_display_clock_speed;
11478 	else if (IS_I945GM(dev) || IS_845G(dev))
11479 		dev_priv->display.get_display_clock_speed =
11480 			i9xx_misc_get_display_clock_speed;
11481 	else if (IS_PINEVIEW(dev))
11482 		dev_priv->display.get_display_clock_speed =
11483 			pnv_get_display_clock_speed;
11484 	else if (IS_I915GM(dev))
11485 		dev_priv->display.get_display_clock_speed =
11486 			i915gm_get_display_clock_speed;
11487 	else if (IS_I865G(dev))
11488 		dev_priv->display.get_display_clock_speed =
11489 			i865_get_display_clock_speed;
11490 	else if (IS_I85X(dev))
11491 		dev_priv->display.get_display_clock_speed =
11492 			i855_get_display_clock_speed;
11493 	else /* 852, 830 */
11494 		dev_priv->display.get_display_clock_speed =
11495 			i830_get_display_clock_speed;
11496 
11497 	if (HAS_PCH_SPLIT(dev)) {
11498 		if (IS_GEN5(dev)) {
11499 			dev_priv->display.fdi_link_train = ironlake_fdi_link_train;
11500 			dev_priv->display.write_eld = ironlake_write_eld;
11501 		} else if (IS_GEN6(dev)) {
11502 			dev_priv->display.fdi_link_train = gen6_fdi_link_train;
11503 			dev_priv->display.write_eld = ironlake_write_eld;
11504 			dev_priv->display.modeset_global_resources =
11505 				snb_modeset_global_resources;
11506 		} else if (IS_IVYBRIDGE(dev)) {
11507 			/* FIXME: detect B0+ stepping and use auto training */
11508 			dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train;
11509 			dev_priv->display.write_eld = ironlake_write_eld;
11510 			dev_priv->display.modeset_global_resources =
11511 				ivb_modeset_global_resources;
11512 		} else if (IS_HASWELL(dev) || IS_GEN8(dev)) {
11513 			dev_priv->display.fdi_link_train = hsw_fdi_link_train;
11514 			dev_priv->display.write_eld = haswell_write_eld;
11515 			dev_priv->display.modeset_global_resources =
11516 				haswell_modeset_global_resources;
11517 		}
11518 	} else if (IS_G4X(dev)) {
11519 		dev_priv->display.write_eld = g4x_write_eld;
11520 	} else if (IS_VALLEYVIEW(dev)) {
11521 		dev_priv->display.modeset_global_resources =
11522 			valleyview_modeset_global_resources;
11523 		dev_priv->display.write_eld = ironlake_write_eld;
11524 	}
11525 
11526 	/* Default just returns -ENODEV to indicate unsupported */
11527 	dev_priv->display.queue_flip = intel_default_queue_flip;
11528 
11529 	switch (INTEL_INFO(dev)->gen) {
11530 	case 2:
11531 		dev_priv->display.queue_flip = intel_gen2_queue_flip;
11532 		break;
11533 
11534 	case 3:
11535 		dev_priv->display.queue_flip = intel_gen3_queue_flip;
11536 		break;
11537 
11538 	case 4:
11539 	case 5:
11540 		dev_priv->display.queue_flip = intel_gen4_queue_flip;
11541 		break;
11542 
11543 	case 6:
11544 		dev_priv->display.queue_flip = intel_gen6_queue_flip;
11545 		break;
11546 	case 7:
11547 	case 8: /* FIXME(BDW): Check that the gen8 RCS flip works. */
11548 		dev_priv->display.queue_flip = intel_gen7_queue_flip;
11549 		break;
11550 	}
11551 
11552 	intel_panel_init_backlight_funcs(dev);
11553 }
11554 
11555 /*
11556  * Some BIOSes insist on assuming the GPU's pipe A is enabled at suspend,
11557  * resume, or other times.  This quirk makes sure that's the case for
11558  * affected systems.
11559  */
11560 static void quirk_pipea_force(struct drm_device *dev)
11561 {
11562 	struct drm_i915_private *dev_priv = dev->dev_private;
11563 
11564 	dev_priv->quirks |= QUIRK_PIPEA_FORCE;
11565 	DRM_INFO("applying pipe a force quirk\n");
11566 }
11567 
11568 /*
11569  * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
11570  */
11571 static void quirk_ssc_force_disable(struct drm_device *dev)
11572 {
11573 	struct drm_i915_private *dev_priv = dev->dev_private;
11574 	dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE;
11575 	DRM_INFO("applying lvds SSC disable quirk\n");
11576 }
11577 
11578 /*
11579  * A machine (e.g. Acer Aspire 5734Z) may need to invert the panel backlight
11580  * brightness value
11581  */
11582 static void quirk_invert_brightness(struct drm_device *dev)
11583 {
11584 	struct drm_i915_private *dev_priv = dev->dev_private;
11585 	dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS;
11586 	DRM_INFO("applying inverted panel brightness quirk\n");
11587 }
11588 
11589 /* Some VBT's incorrectly indicate no backlight is present */
11590 static void quirk_backlight_present(struct drm_device *dev)
11591 {
11592 	struct drm_i915_private *dev_priv = dev->dev_private;
11593 	dev_priv->quirks |= QUIRK_BACKLIGHT_PRESENT;
11594 	DRM_INFO("applying backlight present quirk\n");
11595 }
11596 
11597 struct intel_quirk {
11598 	int device;
11599 	int subsystem_vendor;
11600 	int subsystem_device;
11601 	void (*hook)(struct drm_device *dev);
11602 };
11603 
11604 /* For systems that don't have a meaningful PCI subdevice/subvendor ID */
11605 struct intel_dmi_quirk {
11606 	void (*hook)(struct drm_device *dev);
11607 	const struct dmi_system_id (*dmi_id_list)[];
11608 };
11609 
11610 static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
11611 {
11612 	DRM_INFO("Backlight polarity reversed on %s\n", id->ident);
11613 	return 1;
11614 }
11615 
11616 static const struct intel_dmi_quirk intel_dmi_quirks[] = {
11617 	{
11618 		.dmi_id_list = &(const struct dmi_system_id[]) {
11619 			{
11620 				.callback = intel_dmi_reverse_brightness,
11621 				.ident = "NCR Corporation",
11622 				.matches = {DMI_MATCH(DMI_SYS_VENDOR, "NCR Corporation"),
11623 					    DMI_MATCH(DMI_PRODUCT_NAME, ""),
11624 				},
11625 			},
11626 			{ }  /* terminating entry */
11627 		},
11628 		.hook = quirk_invert_brightness,
11629 	},
11630 };
11631 
11632 static struct intel_quirk intel_quirks[] = {
11633 	/* HP Mini needs pipe A force quirk (LP: #322104) */
11634 	{ 0x27ae, 0x103c, 0x361a, quirk_pipea_force },
11635 
11636 	/* Toshiba Protege R-205, S-209 needs pipe A force quirk */
11637 	{ 0x2592, 0x1179, 0x0001, quirk_pipea_force },
11638 
11639 	/* ThinkPad T60 needs pipe A force quirk (bug #16494) */
11640 	{ 0x2782, 0x17aa, 0x201a, quirk_pipea_force },
11641 
11642 	/* Lenovo U160 cannot use SSC on LVDS */
11643 	{ 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable },
11644 
11645 	/* Sony Vaio Y cannot use SSC on LVDS */
11646 	{ 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
11647 
11648 	/* Acer Aspire 5734Z must invert backlight brightness */
11649 	{ 0x2a42, 0x1025, 0x0459, quirk_invert_brightness },
11650 
11651 	/* Acer/eMachines G725 */
11652 	{ 0x2a42, 0x1025, 0x0210, quirk_invert_brightness },
11653 
11654 	/* Acer/eMachines e725 */
11655 	{ 0x2a42, 0x1025, 0x0212, quirk_invert_brightness },
11656 
11657 	/* Acer/Packard Bell NCL20 */
11658 	{ 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
11659 
11660 	/* Acer Aspire 4736Z */
11661 	{ 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
11662 
11663 	/* Acer Aspire 5336 */
11664 	{ 0x2a42, 0x1025, 0x048a, quirk_invert_brightness },
11665 
11666 	/* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */
11667 	{ 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
11668 
11669 	/* Toshiba CB35 Chromebook (Celeron 2955U) */
11670 	{ 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
11671 
11672 	/* HP Chromebook 14 (Celeron 2955U) */
11673 	{ 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
11674 };
11675 
11676 static void intel_init_quirks(struct drm_device *dev)
11677 {
11678 	struct device *d = dev->dev;
11679 	int i;
11680 
11681 	for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
11682 		struct intel_quirk *q = &intel_quirks[i];
11683 
11684 		if (pci_get_device(d) == q->device &&
11685 		    (pci_get_subvendor(d) == q->subsystem_vendor ||
11686 		     q->subsystem_vendor == PCI_ANY_ID) &&
11687 		    (pci_get_subdevice(d) == q->subsystem_device ||
11688 		     q->subsystem_device == PCI_ANY_ID))
11689 			q->hook(dev);
11690 	}
11691 	for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
11692 		if (dmi_check_system(*intel_dmi_quirks[i].dmi_id_list) != 0)
11693 			intel_dmi_quirks[i].hook(dev);
11694 	}
11695 }
11696 
11697 /* Disable the VGA plane that we never use */
11698 static void i915_disable_vga(struct drm_device *dev)
11699 {
11700 	struct drm_i915_private *dev_priv = dev->dev_private;
11701 	u8 sr1;
11702 	u32 vga_reg = i915_vgacntrl_reg(dev);
11703 
11704 	/* WaEnableVGAAccessThroughIOPort:ctg,elk,ilk,snb,ivb,vlv,hsw */
11705 #if 0
11706 	vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
11707 #endif
11708 	outb(VGA_SR_INDEX, SR01);
11709 	sr1 = inb(VGA_SR_DATA);
11710 	outb(VGA_SR_DATA, sr1 | 1 << 5);
11711 #if 0
11712 	vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
11713 #endif
11714 	udelay(300);
11715 
11716 	I915_WRITE(vga_reg, VGA_DISP_DISABLE);
11717 	POSTING_READ(vga_reg);
11718 }
11719 
11720 void intel_modeset_init_hw(struct drm_device *dev)
11721 {
11722 	intel_prepare_ddi(dev);
11723 
11724 	intel_init_clock_gating(dev);
11725 
11726 	intel_reset_dpio(dev);
11727 
11728 	intel_enable_gt_powersave(dev);
11729 }
11730 
11731 void intel_modeset_suspend_hw(struct drm_device *dev)
11732 {
11733 	intel_suspend_hw(dev);
11734 }
11735 
11736 void intel_modeset_init(struct drm_device *dev)
11737 {
11738 	struct drm_i915_private *dev_priv = dev->dev_private;
11739 	int sprite, ret;
11740 	enum i915_pipe pipe;
11741 	struct intel_crtc *crtc;
11742 
11743 	drm_mode_config_init(dev);
11744 
11745 	dev->mode_config.min_width = 0;
11746 	dev->mode_config.min_height = 0;
11747 
11748 	dev->mode_config.preferred_depth = 24;
11749 	dev->mode_config.prefer_shadow = 1;
11750 
11751 	dev->mode_config.funcs = &intel_mode_funcs;
11752 
11753 	intel_init_quirks(dev);
11754 
11755 	intel_init_pm(dev);
11756 
11757 	if (INTEL_INFO(dev)->num_pipes == 0)
11758 		return;
11759 
11760 	intel_init_display(dev);
11761 
11762 	if (IS_GEN2(dev)) {
11763 		dev->mode_config.max_width = 2048;
11764 		dev->mode_config.max_height = 2048;
11765 	} else if (IS_GEN3(dev)) {
11766 		dev->mode_config.max_width = 4096;
11767 		dev->mode_config.max_height = 4096;
11768 	} else {
11769 		dev->mode_config.max_width = 8192;
11770 		dev->mode_config.max_height = 8192;
11771 	}
11772 
11773 	if (IS_GEN2(dev)) {
11774 		dev->mode_config.cursor_width = GEN2_CURSOR_WIDTH;
11775 		dev->mode_config.cursor_height = GEN2_CURSOR_HEIGHT;
11776 	} else {
11777 		dev->mode_config.cursor_width = MAX_CURSOR_WIDTH;
11778 		dev->mode_config.cursor_height = MAX_CURSOR_HEIGHT;
11779 	}
11780 
11781 	dev->mode_config.fb_base = dev_priv->gtt.mappable_base;
11782 
11783 	DRM_DEBUG_KMS("%d display pipe%s available.\n",
11784 		      INTEL_INFO(dev)->num_pipes,
11785 		      INTEL_INFO(dev)->num_pipes > 1 ? "s" : "");
11786 
11787 	for_each_pipe(pipe) {
11788 		intel_crtc_init(dev, pipe);
11789 		for_each_sprite(pipe, sprite) {
11790 			ret = intel_plane_init(dev, pipe, sprite);
11791 			if (ret)
11792 				DRM_DEBUG_KMS("pipe %c sprite %c init failed: %d\n",
11793 					      pipe_name(pipe), sprite_name(pipe, sprite), ret);
11794 		}
11795 	}
11796 
11797 	intel_init_dpio(dev);
11798 	intel_reset_dpio(dev);
11799 
11800 	intel_cpu_pll_init(dev);
11801 	intel_shared_dpll_init(dev);
11802 
11803 	/* Just disable it once at startup */
11804 	i915_disable_vga(dev);
11805 	intel_setup_outputs(dev);
11806 
11807 	/* Just in case the BIOS is doing something questionable. */
11808 	intel_disable_fbc(dev);
11809 
11810 	drm_modeset_lock_all(dev);
11811 	intel_modeset_setup_hw_state(dev, false);
11812 	drm_modeset_unlock_all(dev);
11813 
11814 	for_each_intel_crtc(dev, crtc) {
11815 		if (!crtc->active)
11816 			continue;
11817 
11818 		/*
11819 		 * Note that reserving the BIOS fb up front prevents us
11820 		 * from stuffing other stolen allocations like the ring
11821 		 * on top.  This prevents some ugliness at boot time, and
11822 		 * can even allow for smooth boot transitions if the BIOS
11823 		 * fb is large enough for the active pipe configuration.
11824 		 */
11825 		if (dev_priv->display.get_plane_config) {
11826 			dev_priv->display.get_plane_config(crtc,
11827 							   &crtc->plane_config);
11828 			/*
11829 			 * If the fb is shared between multiple heads, we'll
11830 			 * just get the first one.
11831 			 */
11832 			intel_find_plane_obj(crtc, &crtc->plane_config);
11833 		}
11834 	}
11835 }
11836 
11837 static void intel_enable_pipe_a(struct drm_device *dev)
11838 {
11839 	struct intel_connector *connector;
11840 	struct drm_connector *crt = NULL;
11841 	struct intel_load_detect_pipe load_detect_temp;
11842 	struct drm_modeset_acquire_ctx ctx;
11843 
11844 	/* We can't just switch on the pipe A, we need to set things up with a
11845 	 * proper mode and output configuration. As a gross hack, enable pipe A
11846 	 * by enabling the load detect pipe once. */
11847 	list_for_each_entry(connector,
11848 			    &dev->mode_config.connector_list,
11849 			    base.head) {
11850 		if (connector->encoder->type == INTEL_OUTPUT_ANALOG) {
11851 			crt = &connector->base;
11852 			break;
11853 		}
11854 	}
11855 
11856 	if (!crt)
11857 		return;
11858 
11859 	if (intel_get_load_detect_pipe(crt, NULL, &load_detect_temp, &ctx))
11860 		intel_release_load_detect_pipe(crt, &load_detect_temp, &ctx);
11861 
11862 
11863 }
11864 
11865 static bool
11866 intel_check_plane_mapping(struct intel_crtc *crtc)
11867 {
11868 	struct drm_device *dev = crtc->base.dev;
11869 	struct drm_i915_private *dev_priv = dev->dev_private;
11870 	u32 reg, val;
11871 
11872 	if (INTEL_INFO(dev)->num_pipes == 1)
11873 		return true;
11874 
11875 	reg = DSPCNTR(!crtc->plane);
11876 	val = I915_READ(reg);
11877 
11878 	if ((val & DISPLAY_PLANE_ENABLE) &&
11879 	    (!!(val & DISPPLANE_SEL_PIPE_MASK) == crtc->pipe))
11880 		return false;
11881 
11882 	return true;
11883 }
11884 
11885 static void intel_sanitize_crtc(struct intel_crtc *crtc)
11886 {
11887 	struct drm_device *dev = crtc->base.dev;
11888 	struct drm_i915_private *dev_priv = dev->dev_private;
11889 	u32 reg;
11890 
11891 	/* Clear any frame start delays used for debugging left by the BIOS */
11892 	reg = PIPECONF(crtc->config.cpu_transcoder);
11893 	I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
11894 
11895 	/* restore vblank interrupts to correct state */
11896 	if (crtc->active)
11897 		drm_vblank_on(dev, crtc->pipe);
11898 	else
11899 		drm_vblank_off(dev, crtc->pipe);
11900 
11901 	/* We need to sanitize the plane -> pipe mapping first because this will
11902 	 * disable the crtc (and hence change the state) if it is wrong. Note
11903 	 * that gen4+ has a fixed plane -> pipe mapping.  */
11904 	if (INTEL_INFO(dev)->gen < 4 && !intel_check_plane_mapping(crtc)) {
11905 		struct intel_connector *connector;
11906 		bool plane;
11907 
11908 		DRM_DEBUG_KMS("[CRTC:%d] wrong plane connection detected!\n",
11909 			      crtc->base.base.id);
11910 
11911 		/* Pipe has the wrong plane attached and the plane is active.
11912 		 * Temporarily change the plane mapping and disable everything
11913 		 * ...  */
11914 		plane = crtc->plane;
11915 		crtc->plane = !plane;
11916 		crtc->primary_enabled = true;
11917 		dev_priv->display.crtc_disable(&crtc->base);
11918 		crtc->plane = plane;
11919 
11920 		/* ... and break all links. */
11921 		list_for_each_entry(connector, &dev->mode_config.connector_list,
11922 				    base.head) {
11923 			if (connector->encoder->base.crtc != &crtc->base)
11924 				continue;
11925 
11926 			connector->base.dpms = DRM_MODE_DPMS_OFF;
11927 			connector->base.encoder = NULL;
11928 		}
11929 		/* multiple connectors may have the same encoder:
11930 		 *  handle them and break crtc link separately */
11931 		list_for_each_entry(connector, &dev->mode_config.connector_list,
11932 				    base.head)
11933 			if (connector->encoder->base.crtc == &crtc->base) {
11934 				connector->encoder->base.crtc = NULL;
11935 				connector->encoder->connectors_active = false;
11936 			}
11937 
11938 		WARN_ON(crtc->active);
11939 		crtc->base.enabled = false;
11940 	}
11941 
11942 	if (dev_priv->quirks & QUIRK_PIPEA_FORCE &&
11943 	    crtc->pipe == PIPE_A && !crtc->active) {
11944 		/* BIOS forgot to enable pipe A, this mostly happens after
11945 		 * resume. Force-enable the pipe to fix this, the update_dpms
11946 		 * call below we restore the pipe to the right state, but leave
11947 		 * the required bits on. */
11948 		intel_enable_pipe_a(dev);
11949 	}
11950 
11951 	/* Adjust the state of the output pipe according to whether we
11952 	 * have active connectors/encoders. */
11953 	intel_crtc_update_dpms(&crtc->base);
11954 
11955 	if (crtc->active != crtc->base.enabled) {
11956 		struct intel_encoder *encoder;
11957 
11958 		/* This can happen either due to bugs in the get_hw_state
11959 		 * functions or because the pipe is force-enabled due to the
11960 		 * pipe A quirk. */
11961 		DRM_DEBUG_KMS("[CRTC:%d] hw state adjusted, was %s, now %s\n",
11962 			      crtc->base.base.id,
11963 			      crtc->base.enabled ? "enabled" : "disabled",
11964 			      crtc->active ? "enabled" : "disabled");
11965 
11966 		crtc->base.enabled = crtc->active;
11967 
11968 		/* Because we only establish the connector -> encoder ->
11969 		 * crtc links if something is active, this means the
11970 		 * crtc is now deactivated. Break the links. connector
11971 		 * -> encoder links are only establish when things are
11972 		 *  actually up, hence no need to break them. */
11973 		WARN_ON(crtc->active);
11974 
11975 		for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
11976 			WARN_ON(encoder->connectors_active);
11977 			encoder->base.crtc = NULL;
11978 		}
11979 	}
11980 
11981 	if (crtc->active || IS_VALLEYVIEW(dev) || INTEL_INFO(dev)->gen < 5) {
11982 		/*
11983 		 * We start out with underrun reporting disabled to avoid races.
11984 		 * For correct bookkeeping mark this on active crtcs.
11985 		 *
11986 		 * Also on gmch platforms we dont have any hardware bits to
11987 		 * disable the underrun reporting. Which means we need to start
11988 		 * out with underrun reporting disabled also on inactive pipes,
11989 		 * since otherwise we'll complain about the garbage we read when
11990 		 * e.g. coming up after runtime pm.
11991 		 *
11992 		 * No protection against concurrent access is required - at
11993 		 * worst a fifo underrun happens which also sets this to false.
11994 		 */
11995 		crtc->cpu_fifo_underrun_disabled = true;
11996 		crtc->pch_fifo_underrun_disabled = true;
11997 
11998 		update_scanline_offset(crtc);
11999 	}
12000 }
12001 
12002 static void intel_sanitize_encoder(struct intel_encoder *encoder)
12003 {
12004 	struct intel_connector *connector;
12005 	struct drm_device *dev = encoder->base.dev;
12006 
12007 	/* We need to check both for a crtc link (meaning that the
12008 	 * encoder is active and trying to read from a pipe) and the
12009 	 * pipe itself being active. */
12010 	bool has_active_crtc = encoder->base.crtc &&
12011 		to_intel_crtc(encoder->base.crtc)->active;
12012 
12013 	if (encoder->connectors_active && !has_active_crtc) {
12014 		DRM_DEBUG_KMS("[ENCODER:%d:%s] has active connectors but no active pipe!\n",
12015 			      encoder->base.base.id,
12016 			      encoder->base.name);
12017 
12018 		/* Connector is active, but has no active pipe. This is
12019 		 * fallout from our resume register restoring. Disable
12020 		 * the encoder manually again. */
12021 		if (encoder->base.crtc) {
12022 			DRM_DEBUG_KMS("[ENCODER:%d:%s] manually disabled\n",
12023 				      encoder->base.base.id,
12024 				      encoder->base.name);
12025 			encoder->disable(encoder);
12026 		}
12027 		encoder->base.crtc = NULL;
12028 		encoder->connectors_active = false;
12029 
12030 		/* Inconsistent output/port/pipe state happens presumably due to
12031 		 * a bug in one of the get_hw_state functions. Or someplace else
12032 		 * in our code, like the register restore mess on resume. Clamp
12033 		 * things to off as a safer default. */
12034 		list_for_each_entry(connector,
12035 				    &dev->mode_config.connector_list,
12036 				    base.head) {
12037 			if (connector->encoder != encoder)
12038 				continue;
12039 
12040 			connector->base.dpms = DRM_MODE_DPMS_OFF;
12041 			connector->base.encoder = NULL;
12042 		}
12043 	}
12044 	/* Enabled encoders without active connectors will be fixed in
12045 	 * the crtc fixup. */
12046 }
12047 
12048 void i915_redisable_vga_power_on(struct drm_device *dev)
12049 {
12050 	struct drm_i915_private *dev_priv = dev->dev_private;
12051 	u32 vga_reg = i915_vgacntrl_reg(dev);
12052 
12053 	if (!(I915_READ(vga_reg) & VGA_DISP_DISABLE)) {
12054 		DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
12055 		i915_disable_vga(dev);
12056 	}
12057 }
12058 
12059 void i915_redisable_vga(struct drm_device *dev)
12060 {
12061 	struct drm_i915_private *dev_priv = dev->dev_private;
12062 
12063 	/* This function can be called both from intel_modeset_setup_hw_state or
12064 	 * at a very early point in our resume sequence, where the power well
12065 	 * structures are not yet restored. Since this function is at a very
12066 	 * paranoid "someone might have enabled VGA while we were not looking"
12067 	 * level, just check if the power well is enabled instead of trying to
12068 	 * follow the "don't touch the power well if we don't need it" policy
12069 	 * the rest of the driver uses. */
12070 	if (!intel_display_power_enabled(dev_priv, POWER_DOMAIN_VGA))
12071 		return;
12072 
12073 	i915_redisable_vga_power_on(dev);
12074 }
12075 
12076 static bool primary_get_hw_state(struct intel_crtc *crtc)
12077 {
12078 	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
12079 
12080 	if (!crtc->active)
12081 		return false;
12082 
12083 	return I915_READ(DSPCNTR(crtc->plane)) & DISPLAY_PLANE_ENABLE;
12084 }
12085 
12086 static void intel_modeset_readout_hw_state(struct drm_device *dev)
12087 {
12088 	struct drm_i915_private *dev_priv = dev->dev_private;
12089 	enum i915_pipe pipe;
12090 	struct intel_crtc *crtc;
12091 	struct intel_encoder *encoder;
12092 	struct intel_connector *connector;
12093 	int i;
12094 
12095 	for_each_intel_crtc(dev, crtc) {
12096 		memset(&crtc->config, 0, sizeof(crtc->config));
12097 
12098 		crtc->config.quirks |= PIPE_CONFIG_QUIRK_INHERITED_MODE;
12099 
12100 		crtc->active = dev_priv->display.get_pipe_config(crtc,
12101 								 &crtc->config);
12102 
12103 		crtc->base.enabled = crtc->active;
12104 		crtc->primary_enabled = primary_get_hw_state(crtc);
12105 
12106 		DRM_DEBUG_KMS("[CRTC:%d] hw state readout: %s\n",
12107 			      crtc->base.base.id,
12108 			      crtc->active ? "enabled" : "disabled");
12109 	}
12110 
12111 	/* FIXME: Smash this into the new shared dpll infrastructure. */
12112 	if (HAS_DDI(dev))
12113 		intel_ddi_setup_hw_pll_state(dev);
12114 
12115 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
12116 		struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
12117 
12118 		pll->on = pll->get_hw_state(dev_priv, pll, &pll->hw_state);
12119 		pll->active = 0;
12120 		for_each_intel_crtc(dev, crtc) {
12121 			if (crtc->active && intel_crtc_to_shared_dpll(crtc) == pll)
12122 				pll->active++;
12123 		}
12124 		pll->refcount = pll->active;
12125 
12126 		DRM_DEBUG_KMS("%s hw state readout: refcount %i, on %i\n",
12127 			      pll->name, pll->refcount, pll->on);
12128 	}
12129 
12130 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
12131 			    base.head) {
12132 		pipe = 0;
12133 
12134 		if (encoder->get_hw_state(encoder, &pipe)) {
12135 			crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
12136 			encoder->base.crtc = &crtc->base;
12137 			encoder->get_config(encoder, &crtc->config);
12138 		} else {
12139 			encoder->base.crtc = NULL;
12140 		}
12141 
12142 		encoder->connectors_active = false;
12143 		DRM_DEBUG_KMS("[ENCODER:%d:%s] hw state readout: %s, pipe %c\n",
12144 			      encoder->base.base.id,
12145 			      encoder->base.name,
12146 			      encoder->base.crtc ? "enabled" : "disabled",
12147 			      pipe_name(pipe));
12148 	}
12149 
12150 	list_for_each_entry(connector, &dev->mode_config.connector_list,
12151 			    base.head) {
12152 		if (connector->get_hw_state(connector)) {
12153 			connector->base.dpms = DRM_MODE_DPMS_ON;
12154 			connector->encoder->connectors_active = true;
12155 			connector->base.encoder = &connector->encoder->base;
12156 		} else {
12157 			connector->base.dpms = DRM_MODE_DPMS_OFF;
12158 			connector->base.encoder = NULL;
12159 		}
12160 		DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hw state readout: %s\n",
12161 			      connector->base.base.id,
12162 			      connector->base.name,
12163 			      connector->base.encoder ? "enabled" : "disabled");
12164 	}
12165 }
12166 
12167 /* Scan out the current hw modeset state, sanitizes it and maps it into the drm
12168  * and i915 state tracking structures. */
12169 void intel_modeset_setup_hw_state(struct drm_device *dev,
12170 				  bool force_restore)
12171 {
12172 	struct drm_i915_private *dev_priv = dev->dev_private;
12173 	enum i915_pipe pipe;
12174 	struct intel_crtc *crtc;
12175 	struct intel_encoder *encoder;
12176 	int i;
12177 
12178 	intel_modeset_readout_hw_state(dev);
12179 
12180 	/*
12181 	 * Now that we have the config, copy it to each CRTC struct
12182 	 * Note that this could go away if we move to using crtc_config
12183 	 * checking everywhere.
12184 	 */
12185 	for_each_intel_crtc(dev, crtc) {
12186 		if (crtc->active && i915.fastboot) {
12187 			intel_mode_from_pipe_config(&crtc->base.mode, &crtc->config);
12188 			DRM_DEBUG_KMS("[CRTC:%d] found active mode: ",
12189 				      crtc->base.base.id);
12190 			drm_mode_debug_printmodeline(&crtc->base.mode);
12191 		}
12192 	}
12193 
12194 	/* HW state is read out, now we need to sanitize this mess. */
12195 	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
12196 			    base.head) {
12197 		intel_sanitize_encoder(encoder);
12198 	}
12199 
12200 	for_each_pipe(pipe) {
12201 		crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
12202 		intel_sanitize_crtc(crtc);
12203 		intel_dump_pipe_config(crtc, &crtc->config, "[setup_hw_state]");
12204 	}
12205 
12206 	for (i = 0; i < dev_priv->num_shared_dpll; i++) {
12207 		struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
12208 
12209 		if (!pll->on || pll->active)
12210 			continue;
12211 
12212 		DRM_DEBUG_KMS("%s enabled but not in use, disabling\n", pll->name);
12213 
12214 		pll->disable(dev_priv, pll);
12215 		pll->on = false;
12216 	}
12217 
12218 	if (HAS_PCH_SPLIT(dev))
12219 		ilk_wm_get_hw_state(dev);
12220 
12221 	if (force_restore) {
12222 		i915_redisable_vga(dev);
12223 
12224 		/*
12225 		 * We need to use raw interfaces for restoring state to avoid
12226 		 * checking (bogus) intermediate states.
12227 		 */
12228 		for_each_pipe(pipe) {
12229 			struct drm_crtc *crtc =
12230 				dev_priv->pipe_to_crtc_mapping[pipe];
12231 
12232 			__intel_set_mode(crtc, &crtc->mode, crtc->x, crtc->y,
12233 					 crtc->primary->fb);
12234 		}
12235 	} else {
12236 		intel_modeset_update_staged_output_state(dev);
12237 	}
12238 
12239 	intel_modeset_check_state(dev);
12240 }
12241 
12242 void intel_modeset_gem_init(struct drm_device *dev)
12243 {
12244 	struct drm_crtc *c;
12245 	struct intel_framebuffer *fb;
12246 
12247 	mutex_lock(&dev->struct_mutex);
12248 	intel_init_gt_powersave(dev);
12249 	mutex_unlock(&dev->struct_mutex);
12250 
12251 	intel_modeset_init_hw(dev);
12252 
12253 	intel_setup_overlay(dev);
12254 
12255 	/*
12256 	 * Make sure any fbs we allocated at startup are properly
12257 	 * pinned & fenced.  When we do the allocation it's too early
12258 	 * for this.
12259 	 */
12260 	mutex_lock(&dev->struct_mutex);
12261 	for_each_crtc(dev, c) {
12262 		if (!c->primary->fb)
12263 			continue;
12264 
12265 		fb = to_intel_framebuffer(c->primary->fb);
12266 		if (intel_pin_and_fence_fb_obj(dev, fb->obj, NULL)) {
12267 			DRM_ERROR("failed to pin boot fb on pipe %d\n",
12268 				  to_intel_crtc(c)->pipe);
12269 			drm_framebuffer_unreference(c->primary->fb);
12270 			c->primary->fb = NULL;
12271 		}
12272 	}
12273 	mutex_unlock(&dev->struct_mutex);
12274 }
12275 
12276 void intel_connector_unregister(struct intel_connector *intel_connector)
12277 {
12278 	struct drm_connector *connector = &intel_connector->base;
12279 
12280 	intel_panel_destroy_backlight(connector);
12281 	drm_sysfs_connector_remove(connector);
12282 }
12283 
12284 void intel_modeset_cleanup(struct drm_device *dev)
12285 {
12286 	struct drm_i915_private *dev_priv = dev->dev_private;
12287 	struct drm_crtc *crtc;
12288 	struct drm_connector *connector;
12289 
12290 	/*
12291 	 * Interrupts and polling as the first thing to avoid creating havoc.
12292 	 * Too much stuff here (turning of rps, connectors, ...) would
12293 	 * experience fancy races otherwise.
12294 	 */
12295 	drm_irq_uninstall(dev);
12296 	cancel_work_sync(&dev_priv->hotplug_work);
12297 	/*
12298 	 * Due to the hpd irq storm handling the hotplug work can re-arm the
12299 	 * poll handlers. Hence disable polling after hpd handling is shut down.
12300 	 */
12301 	drm_kms_helper_poll_fini(dev);
12302 
12303 	mutex_lock(&dev->struct_mutex);
12304 
12305 	intel_unregister_dsm_handler();
12306 
12307 	for_each_crtc(dev, crtc) {
12308 		/* Skip inactive CRTCs */
12309 		if (!crtc->primary->fb)
12310 			continue;
12311 
12312 		intel_increase_pllclock(crtc);
12313 	}
12314 
12315 	intel_disable_fbc(dev);
12316 
12317 	intel_disable_gt_powersave(dev);
12318 
12319 	ironlake_teardown_rc6(dev);
12320 
12321 	mutex_unlock(&dev->struct_mutex);
12322 
12323 	/* flush any delayed tasks or pending work */
12324 	flush_scheduled_work();
12325 
12326 	/* destroy the backlight and sysfs files before encoders/connectors */
12327 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
12328 		struct intel_connector *intel_connector;
12329 
12330 		intel_connector = to_intel_connector(connector);
12331 		intel_connector->unregister(intel_connector);
12332 	}
12333 
12334 	drm_mode_config_cleanup(dev);
12335 
12336 	intel_cleanup_overlay(dev);
12337 
12338 	mutex_lock(&dev->struct_mutex);
12339 	intel_cleanup_gt_powersave(dev);
12340 	mutex_unlock(&dev->struct_mutex);
12341 }
12342 
12343 /*
12344  * Return which encoder is currently attached for connector.
12345  */
12346 struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
12347 {
12348 	return &intel_attached_encoder(connector)->base;
12349 }
12350 
12351 void intel_connector_attach_encoder(struct intel_connector *connector,
12352 				    struct intel_encoder *encoder)
12353 {
12354 	connector->encoder = encoder;
12355 	drm_mode_connector_attach_encoder(&connector->base,
12356 					  &encoder->base);
12357 }
12358 
12359 /*
12360  * set vga decode state - true == enable VGA decode
12361  */
12362 int intel_modeset_vga_set_state(struct drm_device *dev, bool state)
12363 {
12364 	struct drm_i915_private *dev_priv = dev->dev_private;
12365 	unsigned reg = INTEL_INFO(dev)->gen >= 6 ? SNB_GMCH_CTRL : INTEL_GMCH_CTRL;
12366 	u16 gmch_ctrl;
12367 
12368 	if (pci_read_config_word(dev_priv->bridge_dev, reg, &gmch_ctrl)) {
12369 		DRM_ERROR("failed to read control word\n");
12370 		return -EIO;
12371 	}
12372 
12373 	if (!!(gmch_ctrl & INTEL_GMCH_VGA_DISABLE) == !state)
12374 		return 0;
12375 
12376 	if (state)
12377 		gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
12378 	else
12379 		gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
12380 
12381 	if (pci_write_config_word(dev_priv->bridge_dev, reg, gmch_ctrl)) {
12382 		DRM_ERROR("failed to write control word\n");
12383 		return -EIO;
12384 	}
12385 
12386 	return 0;
12387 }
12388 
12389 #if 0
12390 struct intel_display_error_state {
12391 
12392 	u32 power_well_driver;
12393 
12394 	int num_transcoders;
12395 
12396 	struct intel_cursor_error_state {
12397 		u32 control;
12398 		u32 position;
12399 		u32 base;
12400 		u32 size;
12401 	} cursor[I915_MAX_PIPES];
12402 
12403 	struct intel_pipe_error_state {
12404 		bool power_domain_on;
12405 		u32 source;
12406 		u32 stat;
12407 	} pipe[I915_MAX_PIPES];
12408 
12409 	struct intel_plane_error_state {
12410 		u32 control;
12411 		u32 stride;
12412 		u32 size;
12413 		u32 pos;
12414 		u32 addr;
12415 		u32 surface;
12416 		u32 tile_offset;
12417 	} plane[I915_MAX_PIPES];
12418 
12419 	struct intel_transcoder_error_state {
12420 		bool power_domain_on;
12421 		enum transcoder cpu_transcoder;
12422 
12423 		u32 conf;
12424 
12425 		u32 htotal;
12426 		u32 hblank;
12427 		u32 hsync;
12428 		u32 vtotal;
12429 		u32 vblank;
12430 		u32 vsync;
12431 	} transcoder[4];
12432 };
12433 
12434 struct intel_display_error_state *
12435 intel_display_capture_error_state(struct drm_device *dev)
12436 {
12437 	struct drm_i915_private *dev_priv = dev->dev_private;
12438 	struct intel_display_error_state *error;
12439 	int transcoders[] = {
12440 		TRANSCODER_A,
12441 		TRANSCODER_B,
12442 		TRANSCODER_C,
12443 		TRANSCODER_EDP,
12444 	};
12445 	int i;
12446 
12447 	if (INTEL_INFO(dev)->num_pipes == 0)
12448 		return NULL;
12449 
12450 	error = kzalloc(sizeof(*error), GFP_ATOMIC);
12451 	if (error == NULL)
12452 		return NULL;
12453 
12454 	if (IS_HASWELL(dev) || IS_BROADWELL(dev))
12455 		error->power_well_driver = I915_READ(HSW_PWR_WELL_DRIVER);
12456 
12457 	for_each_pipe(i) {
12458 		error->pipe[i].power_domain_on =
12459 			intel_display_power_enabled_unlocked(dev_priv,
12460 							   POWER_DOMAIN_PIPE(i));
12461 		if (!error->pipe[i].power_domain_on)
12462 			continue;
12463 
12464 		error->cursor[i].control = I915_READ(CURCNTR(i));
12465 		error->cursor[i].position = I915_READ(CURPOS(i));
12466 		error->cursor[i].base = I915_READ(CURBASE(i));
12467 
12468 		error->plane[i].control = I915_READ(DSPCNTR(i));
12469 		error->plane[i].stride = I915_READ(DSPSTRIDE(i));
12470 		if (INTEL_INFO(dev)->gen <= 3) {
12471 			error->plane[i].size = I915_READ(DSPSIZE(i));
12472 			error->plane[i].pos = I915_READ(DSPPOS(i));
12473 		}
12474 		if (INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev))
12475 			error->plane[i].addr = I915_READ(DSPADDR(i));
12476 		if (INTEL_INFO(dev)->gen >= 4) {
12477 			error->plane[i].surface = I915_READ(DSPSURF(i));
12478 			error->plane[i].tile_offset = I915_READ(DSPTILEOFF(i));
12479 		}
12480 
12481 		error->pipe[i].source = I915_READ(PIPESRC(i));
12482 
12483 		if (!HAS_PCH_SPLIT(dev))
12484 			error->pipe[i].stat = I915_READ(PIPESTAT(i));
12485 	}
12486 
12487 	error->num_transcoders = INTEL_INFO(dev)->num_pipes;
12488 	if (HAS_DDI(dev_priv->dev))
12489 		error->num_transcoders++; /* Account for eDP. */
12490 
12491 	for (i = 0; i < error->num_transcoders; i++) {
12492 		enum transcoder cpu_transcoder = transcoders[i];
12493 
12494 		error->transcoder[i].power_domain_on =
12495 			intel_display_power_enabled_unlocked(dev_priv,
12496 				POWER_DOMAIN_TRANSCODER(cpu_transcoder));
12497 		if (!error->transcoder[i].power_domain_on)
12498 			continue;
12499 
12500 		error->transcoder[i].cpu_transcoder = cpu_transcoder;
12501 
12502 		error->transcoder[i].conf = I915_READ(PIPECONF(cpu_transcoder));
12503 		error->transcoder[i].htotal = I915_READ(HTOTAL(cpu_transcoder));
12504 		error->transcoder[i].hblank = I915_READ(HBLANK(cpu_transcoder));
12505 		error->transcoder[i].hsync = I915_READ(HSYNC(cpu_transcoder));
12506 		error->transcoder[i].vtotal = I915_READ(VTOTAL(cpu_transcoder));
12507 		error->transcoder[i].vblank = I915_READ(VBLANK(cpu_transcoder));
12508 		error->transcoder[i].vsync = I915_READ(VSYNC(cpu_transcoder));
12509 	}
12510 
12511 	return error;
12512 }
12513 
12514 #define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__)
12515 
12516 void
12517 intel_display_print_error_state(struct drm_i915_error_state_buf *m,
12518 				struct drm_device *dev,
12519 				struct intel_display_error_state *error)
12520 {
12521 	int i;
12522 
12523 	if (!error)
12524 		return;
12525 
12526 	err_printf(m, "Num Pipes: %d\n", INTEL_INFO(dev)->num_pipes);
12527 	if (IS_HASWELL(dev) || IS_BROADWELL(dev))
12528 		err_printf(m, "PWR_WELL_CTL2: %08x\n",
12529 			   error->power_well_driver);
12530 	for_each_pipe(i) {
12531 		err_printf(m, "Pipe [%d]:\n", i);
12532 		err_printf(m, "  Power: %s\n",
12533 			   error->pipe[i].power_domain_on ? "on" : "off");
12534 		err_printf(m, "  SRC: %08x\n", error->pipe[i].source);
12535 		err_printf(m, "  STAT: %08x\n", error->pipe[i].stat);
12536 
12537 		err_printf(m, "Plane [%d]:\n", i);
12538 		err_printf(m, "  CNTR: %08x\n", error->plane[i].control);
12539 		err_printf(m, "  STRIDE: %08x\n", error->plane[i].stride);
12540 		if (INTEL_INFO(dev)->gen <= 3) {
12541 			err_printf(m, "  SIZE: %08x\n", error->plane[i].size);
12542 			err_printf(m, "  POS: %08x\n", error->plane[i].pos);
12543 		}
12544 		if (INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev))
12545 			err_printf(m, "  ADDR: %08x\n", error->plane[i].addr);
12546 		if (INTEL_INFO(dev)->gen >= 4) {
12547 			err_printf(m, "  SURF: %08x\n", error->plane[i].surface);
12548 			err_printf(m, "  TILEOFF: %08x\n", error->plane[i].tile_offset);
12549 		}
12550 
12551 		err_printf(m, "Cursor [%d]:\n", i);
12552 		err_printf(m, "  CNTR: %08x\n", error->cursor[i].control);
12553 		err_printf(m, "  POS: %08x\n", error->cursor[i].position);
12554 		err_printf(m, "  BASE: %08x\n", error->cursor[i].base);
12555 	}
12556 
12557 	for (i = 0; i < error->num_transcoders; i++) {
12558 		err_printf(m, "CPU transcoder: %c\n",
12559 			   transcoder_name(error->transcoder[i].cpu_transcoder));
12560 		err_printf(m, "  Power: %s\n",
12561 			   error->transcoder[i].power_domain_on ? "on" : "off");
12562 		err_printf(m, "  CONF: %08x\n", error->transcoder[i].conf);
12563 		err_printf(m, "  HTOTAL: %08x\n", error->transcoder[i].htotal);
12564 		err_printf(m, "  HBLANK: %08x\n", error->transcoder[i].hblank);
12565 		err_printf(m, "  HSYNC: %08x\n", error->transcoder[i].hsync);
12566 		err_printf(m, "  VTOTAL: %08x\n", error->transcoder[i].vtotal);
12567 		err_printf(m, "  VBLANK: %08x\n", error->transcoder[i].vblank);
12568 		err_printf(m, "  VSYNC: %08x\n", error->transcoder[i].vsync);
12569 	}
12570 }
12571 #endif
12572