1 /* 2 * Copyright © 2006-2007 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 * 23 * Authors: 24 * Eric Anholt <eric@anholt.net> 25 */ 26 27 #include <linux/i2c.h> 28 #include <linux/input.h> 29 #include <linux/intel-iommu.h> 30 #include <linux/kernel.h> 31 #include <linux/module.h> 32 #include <linux/reservation.h> 33 #include <linux/slab.h> 34 #include <linux/vgaarb.h> 35 36 #include <drm/drm_atomic.h> 37 #include <drm/drm_atomic_helper.h> 38 #include <drm/drm_atomic_uapi.h> 39 #include <drm/drm_dp_helper.h> 40 #include <drm/drm_edid.h> 41 #include <drm/drm_fourcc.h> 42 #include <drm/drm_plane_helper.h> 43 #include <drm/drm_probe_helper.h> 44 #include <drm/drm_rect.h> 45 #include <drm/i915_drm.h> 46 47 #include "display/intel_crt.h" 48 #include "display/intel_ddi.h" 49 #include "display/intel_dp.h" 50 #include "display/intel_dsi.h" 51 #include "display/intel_dvo.h" 52 #include "display/intel_gmbus.h" 53 #include "display/intel_hdmi.h" 54 #include "display/intel_lvds.h" 55 #include "display/intel_sdvo.h" 56 #include "display/intel_tv.h" 57 #include "display/intel_vdsc.h" 58 59 #include "i915_drv.h" 60 #include "i915_trace.h" 61 #include "intel_acpi.h" 62 #include "intel_atomic.h" 63 #include "intel_atomic_plane.h" 64 #include "intel_bw.h" 65 #include "intel_color.h" 66 #include "intel_cdclk.h" 67 #include "intel_drv.h" 68 #include "intel_fbc.h" 69 #include "intel_fbdev.h" 70 #include "intel_fifo_underrun.h" 71 #include "intel_frontbuffer.h" 72 #include "intel_hdcp.h" 73 #include "intel_hotplug.h" 74 #include "intel_overlay.h" 75 #include "intel_pipe_crc.h" 76 #include "intel_pm.h" 77 #include "intel_psr.h" 78 #include "intel_quirks.h" 79 #include "intel_sideband.h" 80 #include "intel_sprite.h" 81 82 /* Primary plane formats for gen <= 3 */ 83 static const u32 i8xx_primary_formats[] = { 84 DRM_FORMAT_C8, 85 DRM_FORMAT_RGB565, 86 DRM_FORMAT_XRGB1555, 87 DRM_FORMAT_XRGB8888, 88 }; 89 90 /* Primary plane formats for gen >= 4 */ 91 static const u32 i965_primary_formats[] = { 92 DRM_FORMAT_C8, 93 DRM_FORMAT_RGB565, 94 DRM_FORMAT_XRGB8888, 95 DRM_FORMAT_XBGR8888, 96 DRM_FORMAT_XRGB2101010, 97 DRM_FORMAT_XBGR2101010, 98 }; 99 100 static const u64 i9xx_format_modifiers[] = { 101 I915_FORMAT_MOD_X_TILED, 102 DRM_FORMAT_MOD_LINEAR, 103 DRM_FORMAT_MOD_INVALID 104 }; 105 106 /* Cursor formats */ 107 static const u32 intel_cursor_formats[] = { 108 DRM_FORMAT_ARGB8888, 109 }; 110 111 static const u64 cursor_format_modifiers[] = { 112 DRM_FORMAT_MOD_LINEAR, 113 DRM_FORMAT_MOD_INVALID 114 }; 115 116 static void i9xx_crtc_clock_get(struct intel_crtc *crtc, 117 struct intel_crtc_state *pipe_config); 118 static void ironlake_pch_clock_get(struct intel_crtc *crtc, 119 struct intel_crtc_state *pipe_config); 120 121 static int intel_framebuffer_init(struct intel_framebuffer *ifb, 122 struct drm_i915_gem_object *obj, 123 struct drm_mode_fb_cmd2 *mode_cmd); 124 static void intel_set_pipe_timings(const struct intel_crtc_state *crtc_state); 125 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state); 126 static void intel_cpu_transcoder_set_m_n(const struct intel_crtc_state *crtc_state, 127 const struct intel_link_m_n *m_n, 128 const struct intel_link_m_n *m2_n2); 129 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state); 130 static void ironlake_set_pipeconf(const struct intel_crtc_state *crtc_state); 131 static void haswell_set_pipeconf(const struct intel_crtc_state *crtc_state); 132 static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state); 133 static void vlv_prepare_pll(struct intel_crtc *crtc, 134 const struct intel_crtc_state *pipe_config); 135 static void chv_prepare_pll(struct intel_crtc *crtc, 136 const struct intel_crtc_state *pipe_config); 137 static void intel_begin_crtc_commit(struct intel_atomic_state *, struct intel_crtc *); 138 static void intel_finish_crtc_commit(struct intel_atomic_state *, struct intel_crtc *); 139 static void intel_crtc_init_scalers(struct intel_crtc *crtc, 140 struct intel_crtc_state *crtc_state); 141 static void skylake_pfit_enable(const struct intel_crtc_state *crtc_state); 142 static void ironlake_pfit_disable(const struct intel_crtc_state *old_crtc_state); 143 static void ironlake_pfit_enable(const struct intel_crtc_state *crtc_state); 144 static void intel_modeset_setup_hw_state(struct drm_device *dev, 145 struct drm_modeset_acquire_ctx *ctx); 146 static void intel_pre_disable_primary_noatomic(struct drm_crtc *crtc); 147 148 struct intel_limit { 149 struct { 150 int min, max; 151 } dot, vco, n, m, m1, m2, p, p1; 152 153 struct { 154 int dot_limit; 155 int p2_slow, p2_fast; 156 } p2; 157 }; 158 159 /* returns HPLL frequency in kHz */ 160 int vlv_get_hpll_vco(struct drm_i915_private *dev_priv) 161 { 162 int hpll_freq, vco_freq[] = { 800, 1600, 2000, 2400 }; 163 164 /* Obtain SKU information */ 165 hpll_freq = vlv_cck_read(dev_priv, CCK_FUSE_REG) & 166 CCK_FUSE_HPLL_FREQ_MASK; 167 168 return vco_freq[hpll_freq] * 1000; 169 } 170 171 int vlv_get_cck_clock(struct drm_i915_private *dev_priv, 172 const char *name, u32 reg, int ref_freq) 173 { 174 u32 val; 175 int divider; 176 177 val = vlv_cck_read(dev_priv, reg); 178 divider = val & CCK_FREQUENCY_VALUES; 179 180 WARN((val & CCK_FREQUENCY_STATUS) != 181 (divider << CCK_FREQUENCY_STATUS_SHIFT), 182 "%s change in progress\n", name); 183 184 return DIV_ROUND_CLOSEST(ref_freq << 1, divider + 1); 185 } 186 187 int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv, 188 const char *name, u32 reg) 189 { 190 int hpll; 191 192 vlv_cck_get(dev_priv); 193 194 if (dev_priv->hpll_freq == 0) 195 dev_priv->hpll_freq = vlv_get_hpll_vco(dev_priv); 196 197 hpll = vlv_get_cck_clock(dev_priv, name, reg, dev_priv->hpll_freq); 198 199 vlv_cck_put(dev_priv); 200 201 return hpll; 202 } 203 204 static void intel_update_czclk(struct drm_i915_private *dev_priv) 205 { 206 if (!(IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))) 207 return; 208 209 dev_priv->czclk_freq = vlv_get_cck_clock_hpll(dev_priv, "czclk", 210 CCK_CZ_CLOCK_CONTROL); 211 212 DRM_DEBUG_DRIVER("CZ clock rate: %d kHz\n", dev_priv->czclk_freq); 213 } 214 215 static inline u32 /* units of 100MHz */ 216 intel_fdi_link_freq(struct drm_i915_private *dev_priv, 217 const struct intel_crtc_state *pipe_config) 218 { 219 if (HAS_DDI(dev_priv)) 220 return pipe_config->port_clock; /* SPLL */ 221 else 222 return dev_priv->fdi_pll_freq; 223 } 224 225 static const struct intel_limit intel_limits_i8xx_dac = { 226 .dot = { .min = 25000, .max = 350000 }, 227 .vco = { .min = 908000, .max = 1512000 }, 228 .n = { .min = 2, .max = 16 }, 229 .m = { .min = 96, .max = 140 }, 230 .m1 = { .min = 18, .max = 26 }, 231 .m2 = { .min = 6, .max = 16 }, 232 .p = { .min = 4, .max = 128 }, 233 .p1 = { .min = 2, .max = 33 }, 234 .p2 = { .dot_limit = 165000, 235 .p2_slow = 4, .p2_fast = 2 }, 236 }; 237 238 static const struct intel_limit intel_limits_i8xx_dvo = { 239 .dot = { .min = 25000, .max = 350000 }, 240 .vco = { .min = 908000, .max = 1512000 }, 241 .n = { .min = 2, .max = 16 }, 242 .m = { .min = 96, .max = 140 }, 243 .m1 = { .min = 18, .max = 26 }, 244 .m2 = { .min = 6, .max = 16 }, 245 .p = { .min = 4, .max = 128 }, 246 .p1 = { .min = 2, .max = 33 }, 247 .p2 = { .dot_limit = 165000, 248 .p2_slow = 4, .p2_fast = 4 }, 249 }; 250 251 static const struct intel_limit intel_limits_i8xx_lvds = { 252 .dot = { .min = 25000, .max = 350000 }, 253 .vco = { .min = 908000, .max = 1512000 }, 254 .n = { .min = 2, .max = 16 }, 255 .m = { .min = 96, .max = 140 }, 256 .m1 = { .min = 18, .max = 26 }, 257 .m2 = { .min = 6, .max = 16 }, 258 .p = { .min = 4, .max = 128 }, 259 .p1 = { .min = 1, .max = 6 }, 260 .p2 = { .dot_limit = 165000, 261 .p2_slow = 14, .p2_fast = 7 }, 262 }; 263 264 static const struct intel_limit intel_limits_i9xx_sdvo = { 265 .dot = { .min = 20000, .max = 400000 }, 266 .vco = { .min = 1400000, .max = 2800000 }, 267 .n = { .min = 1, .max = 6 }, 268 .m = { .min = 70, .max = 120 }, 269 .m1 = { .min = 8, .max = 18 }, 270 .m2 = { .min = 3, .max = 7 }, 271 .p = { .min = 5, .max = 80 }, 272 .p1 = { .min = 1, .max = 8 }, 273 .p2 = { .dot_limit = 200000, 274 .p2_slow = 10, .p2_fast = 5 }, 275 }; 276 277 static const struct intel_limit intel_limits_i9xx_lvds = { 278 .dot = { .min = 20000, .max = 400000 }, 279 .vco = { .min = 1400000, .max = 2800000 }, 280 .n = { .min = 1, .max = 6 }, 281 .m = { .min = 70, .max = 120 }, 282 .m1 = { .min = 8, .max = 18 }, 283 .m2 = { .min = 3, .max = 7 }, 284 .p = { .min = 7, .max = 98 }, 285 .p1 = { .min = 1, .max = 8 }, 286 .p2 = { .dot_limit = 112000, 287 .p2_slow = 14, .p2_fast = 7 }, 288 }; 289 290 291 static const struct intel_limit intel_limits_g4x_sdvo = { 292 .dot = { .min = 25000, .max = 270000 }, 293 .vco = { .min = 1750000, .max = 3500000}, 294 .n = { .min = 1, .max = 4 }, 295 .m = { .min = 104, .max = 138 }, 296 .m1 = { .min = 17, .max = 23 }, 297 .m2 = { .min = 5, .max = 11 }, 298 .p = { .min = 10, .max = 30 }, 299 .p1 = { .min = 1, .max = 3}, 300 .p2 = { .dot_limit = 270000, 301 .p2_slow = 10, 302 .p2_fast = 10 303 }, 304 }; 305 306 static const struct intel_limit intel_limits_g4x_hdmi = { 307 .dot = { .min = 22000, .max = 400000 }, 308 .vco = { .min = 1750000, .max = 3500000}, 309 .n = { .min = 1, .max = 4 }, 310 .m = { .min = 104, .max = 138 }, 311 .m1 = { .min = 16, .max = 23 }, 312 .m2 = { .min = 5, .max = 11 }, 313 .p = { .min = 5, .max = 80 }, 314 .p1 = { .min = 1, .max = 8}, 315 .p2 = { .dot_limit = 165000, 316 .p2_slow = 10, .p2_fast = 5 }, 317 }; 318 319 static const struct intel_limit intel_limits_g4x_single_channel_lvds = { 320 .dot = { .min = 20000, .max = 115000 }, 321 .vco = { .min = 1750000, .max = 3500000 }, 322 .n = { .min = 1, .max = 3 }, 323 .m = { .min = 104, .max = 138 }, 324 .m1 = { .min = 17, .max = 23 }, 325 .m2 = { .min = 5, .max = 11 }, 326 .p = { .min = 28, .max = 112 }, 327 .p1 = { .min = 2, .max = 8 }, 328 .p2 = { .dot_limit = 0, 329 .p2_slow = 14, .p2_fast = 14 330 }, 331 }; 332 333 static const struct intel_limit intel_limits_g4x_dual_channel_lvds = { 334 .dot = { .min = 80000, .max = 224000 }, 335 .vco = { .min = 1750000, .max = 3500000 }, 336 .n = { .min = 1, .max = 3 }, 337 .m = { .min = 104, .max = 138 }, 338 .m1 = { .min = 17, .max = 23 }, 339 .m2 = { .min = 5, .max = 11 }, 340 .p = { .min = 14, .max = 42 }, 341 .p1 = { .min = 2, .max = 6 }, 342 .p2 = { .dot_limit = 0, 343 .p2_slow = 7, .p2_fast = 7 344 }, 345 }; 346 347 static const struct intel_limit intel_limits_pineview_sdvo = { 348 .dot = { .min = 20000, .max = 400000}, 349 .vco = { .min = 1700000, .max = 3500000 }, 350 /* Pineview's Ncounter is a ring counter */ 351 .n = { .min = 3, .max = 6 }, 352 .m = { .min = 2, .max = 256 }, 353 /* Pineview only has one combined m divider, which we treat as m2. */ 354 .m1 = { .min = 0, .max = 0 }, 355 .m2 = { .min = 0, .max = 254 }, 356 .p = { .min = 5, .max = 80 }, 357 .p1 = { .min = 1, .max = 8 }, 358 .p2 = { .dot_limit = 200000, 359 .p2_slow = 10, .p2_fast = 5 }, 360 }; 361 362 static const struct intel_limit intel_limits_pineview_lvds = { 363 .dot = { .min = 20000, .max = 400000 }, 364 .vco = { .min = 1700000, .max = 3500000 }, 365 .n = { .min = 3, .max = 6 }, 366 .m = { .min = 2, .max = 256 }, 367 .m1 = { .min = 0, .max = 0 }, 368 .m2 = { .min = 0, .max = 254 }, 369 .p = { .min = 7, .max = 112 }, 370 .p1 = { .min = 1, .max = 8 }, 371 .p2 = { .dot_limit = 112000, 372 .p2_slow = 14, .p2_fast = 14 }, 373 }; 374 375 /* Ironlake / Sandybridge 376 * 377 * We calculate clock using (register_value + 2) for N/M1/M2, so here 378 * the range value for them is (actual_value - 2). 379 */ 380 static const struct intel_limit intel_limits_ironlake_dac = { 381 .dot = { .min = 25000, .max = 350000 }, 382 .vco = { .min = 1760000, .max = 3510000 }, 383 .n = { .min = 1, .max = 5 }, 384 .m = { .min = 79, .max = 127 }, 385 .m1 = { .min = 12, .max = 22 }, 386 .m2 = { .min = 5, .max = 9 }, 387 .p = { .min = 5, .max = 80 }, 388 .p1 = { .min = 1, .max = 8 }, 389 .p2 = { .dot_limit = 225000, 390 .p2_slow = 10, .p2_fast = 5 }, 391 }; 392 393 static const struct intel_limit intel_limits_ironlake_single_lvds = { 394 .dot = { .min = 25000, .max = 350000 }, 395 .vco = { .min = 1760000, .max = 3510000 }, 396 .n = { .min = 1, .max = 3 }, 397 .m = { .min = 79, .max = 118 }, 398 .m1 = { .min = 12, .max = 22 }, 399 .m2 = { .min = 5, .max = 9 }, 400 .p = { .min = 28, .max = 112 }, 401 .p1 = { .min = 2, .max = 8 }, 402 .p2 = { .dot_limit = 225000, 403 .p2_slow = 14, .p2_fast = 14 }, 404 }; 405 406 static const struct intel_limit intel_limits_ironlake_dual_lvds = { 407 .dot = { .min = 25000, .max = 350000 }, 408 .vco = { .min = 1760000, .max = 3510000 }, 409 .n = { .min = 1, .max = 3 }, 410 .m = { .min = 79, .max = 127 }, 411 .m1 = { .min = 12, .max = 22 }, 412 .m2 = { .min = 5, .max = 9 }, 413 .p = { .min = 14, .max = 56 }, 414 .p1 = { .min = 2, .max = 8 }, 415 .p2 = { .dot_limit = 225000, 416 .p2_slow = 7, .p2_fast = 7 }, 417 }; 418 419 /* LVDS 100mhz refclk limits. */ 420 static const struct intel_limit intel_limits_ironlake_single_lvds_100m = { 421 .dot = { .min = 25000, .max = 350000 }, 422 .vco = { .min = 1760000, .max = 3510000 }, 423 .n = { .min = 1, .max = 2 }, 424 .m = { .min = 79, .max = 126 }, 425 .m1 = { .min = 12, .max = 22 }, 426 .m2 = { .min = 5, .max = 9 }, 427 .p = { .min = 28, .max = 112 }, 428 .p1 = { .min = 2, .max = 8 }, 429 .p2 = { .dot_limit = 225000, 430 .p2_slow = 14, .p2_fast = 14 }, 431 }; 432 433 static const struct intel_limit intel_limits_ironlake_dual_lvds_100m = { 434 .dot = { .min = 25000, .max = 350000 }, 435 .vco = { .min = 1760000, .max = 3510000 }, 436 .n = { .min = 1, .max = 3 }, 437 .m = { .min = 79, .max = 126 }, 438 .m1 = { .min = 12, .max = 22 }, 439 .m2 = { .min = 5, .max = 9 }, 440 .p = { .min = 14, .max = 42 }, 441 .p1 = { .min = 2, .max = 6 }, 442 .p2 = { .dot_limit = 225000, 443 .p2_slow = 7, .p2_fast = 7 }, 444 }; 445 446 static const struct intel_limit intel_limits_vlv = { 447 /* 448 * These are the data rate limits (measured in fast clocks) 449 * since those are the strictest limits we have. The fast 450 * clock and actual rate limits are more relaxed, so checking 451 * them would make no difference. 452 */ 453 .dot = { .min = 25000 * 5, .max = 270000 * 5 }, 454 .vco = { .min = 4000000, .max = 6000000 }, 455 .n = { .min = 1, .max = 7 }, 456 .m1 = { .min = 2, .max = 3 }, 457 .m2 = { .min = 11, .max = 156 }, 458 .p1 = { .min = 2, .max = 3 }, 459 .p2 = { .p2_slow = 2, .p2_fast = 20 }, /* slow=min, fast=max */ 460 }; 461 462 static const struct intel_limit intel_limits_chv = { 463 /* 464 * These are the data rate limits (measured in fast clocks) 465 * since those are the strictest limits we have. The fast 466 * clock and actual rate limits are more relaxed, so checking 467 * them would make no difference. 468 */ 469 .dot = { .min = 25000 * 5, .max = 540000 * 5}, 470 .vco = { .min = 4800000, .max = 6480000 }, 471 .n = { .min = 1, .max = 1 }, 472 .m1 = { .min = 2, .max = 2 }, 473 .m2 = { .min = 24 << 22, .max = 175 << 22 }, 474 .p1 = { .min = 2, .max = 4 }, 475 .p2 = { .p2_slow = 1, .p2_fast = 14 }, 476 }; 477 478 static const struct intel_limit intel_limits_bxt = { 479 /* FIXME: find real dot limits */ 480 .dot = { .min = 0, .max = INT_MAX }, 481 .vco = { .min = 4800000, .max = 6700000 }, 482 .n = { .min = 1, .max = 1 }, 483 .m1 = { .min = 2, .max = 2 }, 484 /* FIXME: find real m2 limits */ 485 .m2 = { .min = 2 << 22, .max = 255 << 22 }, 486 .p1 = { .min = 2, .max = 4 }, 487 .p2 = { .p2_slow = 1, .p2_fast = 20 }, 488 }; 489 490 /* WA Display #0827: Gen9:all */ 491 static void 492 skl_wa_827(struct drm_i915_private *dev_priv, int pipe, bool enable) 493 { 494 if (enable) 495 I915_WRITE(CLKGATE_DIS_PSL(pipe), 496 I915_READ(CLKGATE_DIS_PSL(pipe)) | 497 DUPS1_GATING_DIS | DUPS2_GATING_DIS); 498 else 499 I915_WRITE(CLKGATE_DIS_PSL(pipe), 500 I915_READ(CLKGATE_DIS_PSL(pipe)) & 501 ~(DUPS1_GATING_DIS | DUPS2_GATING_DIS)); 502 } 503 504 /* Wa_2006604312:icl */ 505 static void 506 icl_wa_scalerclkgating(struct drm_i915_private *dev_priv, enum pipe pipe, 507 bool enable) 508 { 509 if (enable) 510 I915_WRITE(CLKGATE_DIS_PSL(pipe), 511 I915_READ(CLKGATE_DIS_PSL(pipe)) | DPFR_GATING_DIS); 512 else 513 I915_WRITE(CLKGATE_DIS_PSL(pipe), 514 I915_READ(CLKGATE_DIS_PSL(pipe)) & ~DPFR_GATING_DIS); 515 } 516 517 static bool 518 needs_modeset(const struct drm_crtc_state *state) 519 { 520 return drm_atomic_crtc_needs_modeset(state); 521 } 522 523 /* 524 * Platform specific helpers to calculate the port PLL loopback- (clock.m), 525 * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast 526 * (clock.dot) clock rates. This fast dot clock is fed to the port's IO logic. 527 * The helpers' return value is the rate of the clock that is fed to the 528 * display engine's pipe which can be the above fast dot clock rate or a 529 * divided-down version of it. 530 */ 531 /* m1 is reserved as 0 in Pineview, n is a ring counter */ 532 static int pnv_calc_dpll_params(int refclk, struct dpll *clock) 533 { 534 clock->m = clock->m2 + 2; 535 clock->p = clock->p1 * clock->p2; 536 if (WARN_ON(clock->n == 0 || clock->p == 0)) 537 return 0; 538 clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n); 539 clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); 540 541 return clock->dot; 542 } 543 544 static u32 i9xx_dpll_compute_m(struct dpll *dpll) 545 { 546 return 5 * (dpll->m1 + 2) + (dpll->m2 + 2); 547 } 548 549 static int i9xx_calc_dpll_params(int refclk, struct dpll *clock) 550 { 551 clock->m = i9xx_dpll_compute_m(clock); 552 clock->p = clock->p1 * clock->p2; 553 if (WARN_ON(clock->n + 2 == 0 || clock->p == 0)) 554 return 0; 555 clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2); 556 clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); 557 558 return clock->dot; 559 } 560 561 static int vlv_calc_dpll_params(int refclk, struct dpll *clock) 562 { 563 clock->m = clock->m1 * clock->m2; 564 clock->p = clock->p1 * clock->p2; 565 if (WARN_ON(clock->n == 0 || clock->p == 0)) 566 return 0; 567 clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n); 568 clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); 569 570 return clock->dot / 5; 571 } 572 573 int chv_calc_dpll_params(int refclk, struct dpll *clock) 574 { 575 clock->m = clock->m1 * clock->m2; 576 clock->p = clock->p1 * clock->p2; 577 if (WARN_ON(clock->n == 0 || clock->p == 0)) 578 return 0; 579 clock->vco = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m), 580 clock->n << 22); 581 clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p); 582 583 return clock->dot / 5; 584 } 585 586 #define INTELPllInvalid(s) do { /* DRM_DEBUG(s); */ return false; } while (0) 587 588 /* 589 * Returns whether the given set of divisors are valid for a given refclk with 590 * the given connectors. 591 */ 592 static bool intel_PLL_is_valid(struct drm_i915_private *dev_priv, 593 const struct intel_limit *limit, 594 const struct dpll *clock) 595 { 596 if (clock->n < limit->n.min || limit->n.max < clock->n) 597 INTELPllInvalid("n out of range\n"); 598 if (clock->p1 < limit->p1.min || limit->p1.max < clock->p1) 599 INTELPllInvalid("p1 out of range\n"); 600 if (clock->m2 < limit->m2.min || limit->m2.max < clock->m2) 601 INTELPllInvalid("m2 out of range\n"); 602 if (clock->m1 < limit->m1.min || limit->m1.max < clock->m1) 603 INTELPllInvalid("m1 out of range\n"); 604 605 if (!IS_PINEVIEW(dev_priv) && !IS_VALLEYVIEW(dev_priv) && 606 !IS_CHERRYVIEW(dev_priv) && !IS_GEN9_LP(dev_priv)) 607 if (clock->m1 <= clock->m2) 608 INTELPllInvalid("m1 <= m2\n"); 609 610 if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv) && 611 !IS_GEN9_LP(dev_priv)) { 612 if (clock->p < limit->p.min || limit->p.max < clock->p) 613 INTELPllInvalid("p out of range\n"); 614 if (clock->m < limit->m.min || limit->m.max < clock->m) 615 INTELPllInvalid("m out of range\n"); 616 } 617 618 if (clock->vco < limit->vco.min || limit->vco.max < clock->vco) 619 INTELPllInvalid("vco out of range\n"); 620 /* XXX: We may need to be checking "Dot clock" depending on the multiplier, 621 * connector, etc., rather than just a single range. 622 */ 623 if (clock->dot < limit->dot.min || limit->dot.max < clock->dot) 624 INTELPllInvalid("dot out of range\n"); 625 626 return true; 627 } 628 629 static int 630 i9xx_select_p2_div(const struct intel_limit *limit, 631 const struct intel_crtc_state *crtc_state, 632 int target) 633 { 634 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 635 636 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 637 /* 638 * For LVDS just rely on its current settings for dual-channel. 639 * We haven't figured out how to reliably set up different 640 * single/dual channel state, if we even can. 641 */ 642 if (intel_is_dual_link_lvds(dev_priv)) 643 return limit->p2.p2_fast; 644 else 645 return limit->p2.p2_slow; 646 } else { 647 if (target < limit->p2.dot_limit) 648 return limit->p2.p2_slow; 649 else 650 return limit->p2.p2_fast; 651 } 652 } 653 654 /* 655 * Returns a set of divisors for the desired target clock with the given 656 * refclk, or FALSE. The returned values represent the clock equation: 657 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2. 658 * 659 * Target and reference clocks are specified in kHz. 660 * 661 * If match_clock is provided, then best_clock P divider must match the P 662 * divider from @match_clock used for LVDS downclocking. 663 */ 664 static bool 665 i9xx_find_best_dpll(const struct intel_limit *limit, 666 struct intel_crtc_state *crtc_state, 667 int target, int refclk, struct dpll *match_clock, 668 struct dpll *best_clock) 669 { 670 struct drm_device *dev = crtc_state->base.crtc->dev; 671 struct dpll clock; 672 int err = target; 673 674 memset(best_clock, 0, sizeof(*best_clock)); 675 676 clock.p2 = i9xx_select_p2_div(limit, crtc_state, target); 677 678 for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; 679 clock.m1++) { 680 for (clock.m2 = limit->m2.min; 681 clock.m2 <= limit->m2.max; clock.m2++) { 682 if (clock.m2 >= clock.m1) 683 break; 684 for (clock.n = limit->n.min; 685 clock.n <= limit->n.max; clock.n++) { 686 for (clock.p1 = limit->p1.min; 687 clock.p1 <= limit->p1.max; clock.p1++) { 688 int this_err; 689 690 i9xx_calc_dpll_params(refclk, &clock); 691 if (!intel_PLL_is_valid(to_i915(dev), 692 limit, 693 &clock)) 694 continue; 695 if (match_clock && 696 clock.p != match_clock->p) 697 continue; 698 699 this_err = abs(clock.dot - target); 700 if (this_err < err) { 701 *best_clock = clock; 702 err = this_err; 703 } 704 } 705 } 706 } 707 } 708 709 return (err != target); 710 } 711 712 /* 713 * Returns a set of divisors for the desired target clock with the given 714 * refclk, or FALSE. The returned values represent the clock equation: 715 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2. 716 * 717 * Target and reference clocks are specified in kHz. 718 * 719 * If match_clock is provided, then best_clock P divider must match the P 720 * divider from @match_clock used for LVDS downclocking. 721 */ 722 static bool 723 pnv_find_best_dpll(const struct intel_limit *limit, 724 struct intel_crtc_state *crtc_state, 725 int target, int refclk, struct dpll *match_clock, 726 struct dpll *best_clock) 727 { 728 struct drm_device *dev = crtc_state->base.crtc->dev; 729 struct dpll clock; 730 int err = target; 731 732 memset(best_clock, 0, sizeof(*best_clock)); 733 734 clock.p2 = i9xx_select_p2_div(limit, crtc_state, target); 735 736 for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; 737 clock.m1++) { 738 for (clock.m2 = limit->m2.min; 739 clock.m2 <= limit->m2.max; clock.m2++) { 740 for (clock.n = limit->n.min; 741 clock.n <= limit->n.max; clock.n++) { 742 for (clock.p1 = limit->p1.min; 743 clock.p1 <= limit->p1.max; clock.p1++) { 744 int this_err; 745 746 pnv_calc_dpll_params(refclk, &clock); 747 if (!intel_PLL_is_valid(to_i915(dev), 748 limit, 749 &clock)) 750 continue; 751 if (match_clock && 752 clock.p != match_clock->p) 753 continue; 754 755 this_err = abs(clock.dot - target); 756 if (this_err < err) { 757 *best_clock = clock; 758 err = this_err; 759 } 760 } 761 } 762 } 763 } 764 765 return (err != target); 766 } 767 768 /* 769 * Returns a set of divisors for the desired target clock with the given 770 * refclk, or FALSE. The returned values represent the clock equation: 771 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2. 772 * 773 * Target and reference clocks are specified in kHz. 774 * 775 * If match_clock is provided, then best_clock P divider must match the P 776 * divider from @match_clock used for LVDS downclocking. 777 */ 778 static bool 779 g4x_find_best_dpll(const struct intel_limit *limit, 780 struct intel_crtc_state *crtc_state, 781 int target, int refclk, struct dpll *match_clock, 782 struct dpll *best_clock) 783 { 784 struct drm_device *dev = crtc_state->base.crtc->dev; 785 struct dpll clock; 786 int max_n; 787 bool found = false; 788 /* approximately equals target * 0.00585 */ 789 int err_most = (target >> 8) + (target >> 9); 790 791 memset(best_clock, 0, sizeof(*best_clock)); 792 793 clock.p2 = i9xx_select_p2_div(limit, crtc_state, target); 794 795 max_n = limit->n.max; 796 /* based on hardware requirement, prefer smaller n to precision */ 797 for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) { 798 /* based on hardware requirement, prefere larger m1,m2 */ 799 for (clock.m1 = limit->m1.max; 800 clock.m1 >= limit->m1.min; clock.m1--) { 801 for (clock.m2 = limit->m2.max; 802 clock.m2 >= limit->m2.min; clock.m2--) { 803 for (clock.p1 = limit->p1.max; 804 clock.p1 >= limit->p1.min; clock.p1--) { 805 int this_err; 806 807 i9xx_calc_dpll_params(refclk, &clock); 808 if (!intel_PLL_is_valid(to_i915(dev), 809 limit, 810 &clock)) 811 continue; 812 813 this_err = abs(clock.dot - target); 814 if (this_err < err_most) { 815 *best_clock = clock; 816 err_most = this_err; 817 max_n = clock.n; 818 found = true; 819 } 820 } 821 } 822 } 823 } 824 return found; 825 } 826 827 /* 828 * Check if the calculated PLL configuration is more optimal compared to the 829 * best configuration and error found so far. Return the calculated error. 830 */ 831 static bool vlv_PLL_is_optimal(struct drm_device *dev, int target_freq, 832 const struct dpll *calculated_clock, 833 const struct dpll *best_clock, 834 unsigned int best_error_ppm, 835 unsigned int *error_ppm) 836 { 837 /* 838 * For CHV ignore the error and consider only the P value. 839 * Prefer a bigger P value based on HW requirements. 840 */ 841 if (IS_CHERRYVIEW(to_i915(dev))) { 842 *error_ppm = 0; 843 844 return calculated_clock->p > best_clock->p; 845 } 846 847 if (WARN_ON_ONCE(!target_freq)) 848 return false; 849 850 *error_ppm = div_u64(1000000ULL * 851 abs(target_freq - calculated_clock->dot), 852 target_freq); 853 /* 854 * Prefer a better P value over a better (smaller) error if the error 855 * is small. Ensure this preference for future configurations too by 856 * setting the error to 0. 857 */ 858 if (*error_ppm < 100 && calculated_clock->p > best_clock->p) { 859 *error_ppm = 0; 860 861 return true; 862 } 863 864 return *error_ppm + 10 < best_error_ppm; 865 } 866 867 /* 868 * Returns a set of divisors for the desired target clock with the given 869 * refclk, or FALSE. The returned values represent the clock equation: 870 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2. 871 */ 872 static bool 873 vlv_find_best_dpll(const struct intel_limit *limit, 874 struct intel_crtc_state *crtc_state, 875 int target, int refclk, struct dpll *match_clock, 876 struct dpll *best_clock) 877 { 878 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 879 struct drm_device *dev = crtc->base.dev; 880 struct dpll clock; 881 unsigned int bestppm = 1000000; 882 /* min update 19.2 MHz */ 883 int max_n = min(limit->n.max, refclk / 19200); 884 bool found = false; 885 886 target *= 5; /* fast clock */ 887 888 memset(best_clock, 0, sizeof(*best_clock)); 889 890 /* based on hardware requirement, prefer smaller n to precision */ 891 for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) { 892 for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) { 893 for (clock.p2 = limit->p2.p2_fast; clock.p2 >= limit->p2.p2_slow; 894 clock.p2 -= clock.p2 > 10 ? 2 : 1) { 895 clock.p = clock.p1 * clock.p2; 896 /* based on hardware requirement, prefer bigger m1,m2 values */ 897 for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) { 898 unsigned int ppm; 899 900 clock.m2 = DIV_ROUND_CLOSEST(target * clock.p * clock.n, 901 refclk * clock.m1); 902 903 vlv_calc_dpll_params(refclk, &clock); 904 905 if (!intel_PLL_is_valid(to_i915(dev), 906 limit, 907 &clock)) 908 continue; 909 910 if (!vlv_PLL_is_optimal(dev, target, 911 &clock, 912 best_clock, 913 bestppm, &ppm)) 914 continue; 915 916 *best_clock = clock; 917 bestppm = ppm; 918 found = true; 919 } 920 } 921 } 922 } 923 924 return found; 925 } 926 927 /* 928 * Returns a set of divisors for the desired target clock with the given 929 * refclk, or FALSE. The returned values represent the clock equation: 930 * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2. 931 */ 932 static bool 933 chv_find_best_dpll(const struct intel_limit *limit, 934 struct intel_crtc_state *crtc_state, 935 int target, int refclk, struct dpll *match_clock, 936 struct dpll *best_clock) 937 { 938 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 939 struct drm_device *dev = crtc->base.dev; 940 unsigned int best_error_ppm; 941 struct dpll clock; 942 u64 m2; 943 int found = false; 944 945 memset(best_clock, 0, sizeof(*best_clock)); 946 best_error_ppm = 1000000; 947 948 /* 949 * Based on hardware doc, the n always set to 1, and m1 always 950 * set to 2. If requires to support 200Mhz refclk, we need to 951 * revisit this because n may not 1 anymore. 952 */ 953 clock.n = 1, clock.m1 = 2; 954 target *= 5; /* fast clock */ 955 956 for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) { 957 for (clock.p2 = limit->p2.p2_fast; 958 clock.p2 >= limit->p2.p2_slow; 959 clock.p2 -= clock.p2 > 10 ? 2 : 1) { 960 unsigned int error_ppm; 961 962 clock.p = clock.p1 * clock.p2; 963 964 m2 = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(target, clock.p * clock.n) << 22, 965 refclk * clock.m1); 966 967 if (m2 > INT_MAX/clock.m1) 968 continue; 969 970 clock.m2 = m2; 971 972 chv_calc_dpll_params(refclk, &clock); 973 974 if (!intel_PLL_is_valid(to_i915(dev), limit, &clock)) 975 continue; 976 977 if (!vlv_PLL_is_optimal(dev, target, &clock, best_clock, 978 best_error_ppm, &error_ppm)) 979 continue; 980 981 *best_clock = clock; 982 best_error_ppm = error_ppm; 983 found = true; 984 } 985 } 986 987 return found; 988 } 989 990 bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, 991 struct dpll *best_clock) 992 { 993 int refclk = 100000; 994 const struct intel_limit *limit = &intel_limits_bxt; 995 996 return chv_find_best_dpll(limit, crtc_state, 997 crtc_state->port_clock, refclk, 998 NULL, best_clock); 999 } 1000 1001 bool intel_crtc_active(struct intel_crtc *crtc) 1002 { 1003 /* Be paranoid as we can arrive here with only partial 1004 * state retrieved from the hardware during setup. 1005 * 1006 * We can ditch the adjusted_mode.crtc_clock check as soon 1007 * as Haswell has gained clock readout/fastboot support. 1008 * 1009 * We can ditch the crtc->primary->state->fb check as soon as we can 1010 * properly reconstruct framebuffers. 1011 * 1012 * FIXME: The intel_crtc->active here should be switched to 1013 * crtc->state->active once we have proper CRTC states wired up 1014 * for atomic. 1015 */ 1016 return crtc->active && crtc->base.primary->state->fb && 1017 crtc->config->base.adjusted_mode.crtc_clock; 1018 } 1019 1020 enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, 1021 enum pipe pipe) 1022 { 1023 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 1024 1025 return crtc->config->cpu_transcoder; 1026 } 1027 1028 static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv, 1029 enum pipe pipe) 1030 { 1031 i915_reg_t reg = PIPEDSL(pipe); 1032 u32 line1, line2; 1033 u32 line_mask; 1034 1035 if (IS_GEN(dev_priv, 2)) 1036 line_mask = DSL_LINEMASK_GEN2; 1037 else 1038 line_mask = DSL_LINEMASK_GEN3; 1039 1040 line1 = I915_READ(reg) & line_mask; 1041 msleep(5); 1042 line2 = I915_READ(reg) & line_mask; 1043 1044 return line1 != line2; 1045 } 1046 1047 static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc, bool state) 1048 { 1049 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1050 enum pipe pipe = crtc->pipe; 1051 1052 /* Wait for the display line to settle/start moving */ 1053 if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100)) 1054 DRM_ERROR("pipe %c scanline %s wait timed out\n", 1055 pipe_name(pipe), onoff(state)); 1056 } 1057 1058 static void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc) 1059 { 1060 wait_for_pipe_scanline_moving(crtc, false); 1061 } 1062 1063 static void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc) 1064 { 1065 wait_for_pipe_scanline_moving(crtc, true); 1066 } 1067 1068 static void 1069 intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state) 1070 { 1071 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 1072 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1073 1074 if (INTEL_GEN(dev_priv) >= 4) { 1075 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; 1076 i915_reg_t reg = PIPECONF(cpu_transcoder); 1077 1078 /* Wait for the Pipe State to go off */ 1079 if (intel_wait_for_register(&dev_priv->uncore, 1080 reg, I965_PIPECONF_ACTIVE, 0, 1081 100)) 1082 WARN(1, "pipe_off wait timed out\n"); 1083 } else { 1084 intel_wait_for_pipe_scanline_stopped(crtc); 1085 } 1086 } 1087 1088 /* Only for pre-ILK configs */ 1089 void assert_pll(struct drm_i915_private *dev_priv, 1090 enum pipe pipe, bool state) 1091 { 1092 u32 val; 1093 bool cur_state; 1094 1095 val = I915_READ(DPLL(pipe)); 1096 cur_state = !!(val & DPLL_VCO_ENABLE); 1097 I915_STATE_WARN(cur_state != state, 1098 "PLL state assertion failure (expected %s, current %s)\n", 1099 onoff(state), onoff(cur_state)); 1100 } 1101 1102 /* XXX: the dsi pll is shared between MIPI DSI ports */ 1103 void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state) 1104 { 1105 u32 val; 1106 bool cur_state; 1107 1108 vlv_cck_get(dev_priv); 1109 val = vlv_cck_read(dev_priv, CCK_REG_DSI_PLL_CONTROL); 1110 vlv_cck_put(dev_priv); 1111 1112 cur_state = val & DSI_PLL_VCO_EN; 1113 I915_STATE_WARN(cur_state != state, 1114 "DSI PLL state assertion failure (expected %s, current %s)\n", 1115 onoff(state), onoff(cur_state)); 1116 } 1117 1118 static void assert_fdi_tx(struct drm_i915_private *dev_priv, 1119 enum pipe pipe, bool state) 1120 { 1121 bool cur_state; 1122 enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, 1123 pipe); 1124 1125 if (HAS_DDI(dev_priv)) { 1126 /* DDI does not have a specific FDI_TX register */ 1127 u32 val = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); 1128 cur_state = !!(val & TRANS_DDI_FUNC_ENABLE); 1129 } else { 1130 u32 val = I915_READ(FDI_TX_CTL(pipe)); 1131 cur_state = !!(val & FDI_TX_ENABLE); 1132 } 1133 I915_STATE_WARN(cur_state != state, 1134 "FDI TX state assertion failure (expected %s, current %s)\n", 1135 onoff(state), onoff(cur_state)); 1136 } 1137 #define assert_fdi_tx_enabled(d, p) assert_fdi_tx(d, p, true) 1138 #define assert_fdi_tx_disabled(d, p) assert_fdi_tx(d, p, false) 1139 1140 static void assert_fdi_rx(struct drm_i915_private *dev_priv, 1141 enum pipe pipe, bool state) 1142 { 1143 u32 val; 1144 bool cur_state; 1145 1146 val = I915_READ(FDI_RX_CTL(pipe)); 1147 cur_state = !!(val & FDI_RX_ENABLE); 1148 I915_STATE_WARN(cur_state != state, 1149 "FDI RX state assertion failure (expected %s, current %s)\n", 1150 onoff(state), onoff(cur_state)); 1151 } 1152 #define assert_fdi_rx_enabled(d, p) assert_fdi_rx(d, p, true) 1153 #define assert_fdi_rx_disabled(d, p) assert_fdi_rx(d, p, false) 1154 1155 static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv, 1156 enum pipe pipe) 1157 { 1158 u32 val; 1159 1160 /* ILK FDI PLL is always enabled */ 1161 if (IS_GEN(dev_priv, 5)) 1162 return; 1163 1164 /* On Haswell, DDI ports are responsible for the FDI PLL setup */ 1165 if (HAS_DDI(dev_priv)) 1166 return; 1167 1168 val = I915_READ(FDI_TX_CTL(pipe)); 1169 I915_STATE_WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n"); 1170 } 1171 1172 void assert_fdi_rx_pll(struct drm_i915_private *dev_priv, 1173 enum pipe pipe, bool state) 1174 { 1175 u32 val; 1176 bool cur_state; 1177 1178 val = I915_READ(FDI_RX_CTL(pipe)); 1179 cur_state = !!(val & FDI_RX_PLL_ENABLE); 1180 I915_STATE_WARN(cur_state != state, 1181 "FDI RX PLL assertion failure (expected %s, current %s)\n", 1182 onoff(state), onoff(cur_state)); 1183 } 1184 1185 void assert_panel_unlocked(struct drm_i915_private *dev_priv, enum pipe pipe) 1186 { 1187 i915_reg_t pp_reg; 1188 u32 val; 1189 enum pipe panel_pipe = INVALID_PIPE; 1190 bool locked = true; 1191 1192 if (WARN_ON(HAS_DDI(dev_priv))) 1193 return; 1194 1195 if (HAS_PCH_SPLIT(dev_priv)) { 1196 u32 port_sel; 1197 1198 pp_reg = PP_CONTROL(0); 1199 port_sel = I915_READ(PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK; 1200 1201 switch (port_sel) { 1202 case PANEL_PORT_SELECT_LVDS: 1203 intel_lvds_port_enabled(dev_priv, PCH_LVDS, &panel_pipe); 1204 break; 1205 case PANEL_PORT_SELECT_DPA: 1206 intel_dp_port_enabled(dev_priv, DP_A, PORT_A, &panel_pipe); 1207 break; 1208 case PANEL_PORT_SELECT_DPC: 1209 intel_dp_port_enabled(dev_priv, PCH_DP_C, PORT_C, &panel_pipe); 1210 break; 1211 case PANEL_PORT_SELECT_DPD: 1212 intel_dp_port_enabled(dev_priv, PCH_DP_D, PORT_D, &panel_pipe); 1213 break; 1214 default: 1215 MISSING_CASE(port_sel); 1216 break; 1217 } 1218 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 1219 /* presumably write lock depends on pipe, not port select */ 1220 pp_reg = PP_CONTROL(pipe); 1221 panel_pipe = pipe; 1222 } else { 1223 u32 port_sel; 1224 1225 pp_reg = PP_CONTROL(0); 1226 port_sel = I915_READ(PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK; 1227 1228 WARN_ON(port_sel != PANEL_PORT_SELECT_LVDS); 1229 intel_lvds_port_enabled(dev_priv, LVDS, &panel_pipe); 1230 } 1231 1232 val = I915_READ(pp_reg); 1233 if (!(val & PANEL_POWER_ON) || 1234 ((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS)) 1235 locked = false; 1236 1237 I915_STATE_WARN(panel_pipe == pipe && locked, 1238 "panel assertion failure, pipe %c regs locked\n", 1239 pipe_name(pipe)); 1240 } 1241 1242 void assert_pipe(struct drm_i915_private *dev_priv, 1243 enum pipe pipe, bool state) 1244 { 1245 bool cur_state; 1246 enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, 1247 pipe); 1248 enum intel_display_power_domain power_domain; 1249 intel_wakeref_t wakeref; 1250 1251 /* we keep both pipes enabled on 830 */ 1252 if (IS_I830(dev_priv)) 1253 state = true; 1254 1255 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); 1256 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 1257 if (wakeref) { 1258 u32 val = I915_READ(PIPECONF(cpu_transcoder)); 1259 cur_state = !!(val & PIPECONF_ENABLE); 1260 1261 intel_display_power_put(dev_priv, power_domain, wakeref); 1262 } else { 1263 cur_state = false; 1264 } 1265 1266 I915_STATE_WARN(cur_state != state, 1267 "pipe %c assertion failure (expected %s, current %s)\n", 1268 pipe_name(pipe), onoff(state), onoff(cur_state)); 1269 } 1270 1271 static void assert_plane(struct intel_plane *plane, bool state) 1272 { 1273 enum pipe pipe; 1274 bool cur_state; 1275 1276 cur_state = plane->get_hw_state(plane, &pipe); 1277 1278 I915_STATE_WARN(cur_state != state, 1279 "%s assertion failure (expected %s, current %s)\n", 1280 plane->base.name, onoff(state), onoff(cur_state)); 1281 } 1282 1283 #define assert_plane_enabled(p) assert_plane(p, true) 1284 #define assert_plane_disabled(p) assert_plane(p, false) 1285 1286 static void assert_planes_disabled(struct intel_crtc *crtc) 1287 { 1288 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1289 struct intel_plane *plane; 1290 1291 for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) 1292 assert_plane_disabled(plane); 1293 } 1294 1295 static void assert_vblank_disabled(struct drm_crtc *crtc) 1296 { 1297 if (I915_STATE_WARN_ON(drm_crtc_vblank_get(crtc) == 0)) 1298 drm_crtc_vblank_put(crtc); 1299 } 1300 1301 void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv, 1302 enum pipe pipe) 1303 { 1304 u32 val; 1305 bool enabled; 1306 1307 val = I915_READ(PCH_TRANSCONF(pipe)); 1308 enabled = !!(val & TRANS_ENABLE); 1309 I915_STATE_WARN(enabled, 1310 "transcoder assertion failed, should be off on pipe %c but is still active\n", 1311 pipe_name(pipe)); 1312 } 1313 1314 static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv, 1315 enum pipe pipe, enum port port, 1316 i915_reg_t dp_reg) 1317 { 1318 enum pipe port_pipe; 1319 bool state; 1320 1321 state = intel_dp_port_enabled(dev_priv, dp_reg, port, &port_pipe); 1322 1323 I915_STATE_WARN(state && port_pipe == pipe, 1324 "PCH DP %c enabled on transcoder %c, should be disabled\n", 1325 port_name(port), pipe_name(pipe)); 1326 1327 I915_STATE_WARN(HAS_PCH_IBX(dev_priv) && !state && port_pipe == PIPE_B, 1328 "IBX PCH DP %c still using transcoder B\n", 1329 port_name(port)); 1330 } 1331 1332 static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv, 1333 enum pipe pipe, enum port port, 1334 i915_reg_t hdmi_reg) 1335 { 1336 enum pipe port_pipe; 1337 bool state; 1338 1339 state = intel_sdvo_port_enabled(dev_priv, hdmi_reg, &port_pipe); 1340 1341 I915_STATE_WARN(state && port_pipe == pipe, 1342 "PCH HDMI %c enabled on transcoder %c, should be disabled\n", 1343 port_name(port), pipe_name(pipe)); 1344 1345 I915_STATE_WARN(HAS_PCH_IBX(dev_priv) && !state && port_pipe == PIPE_B, 1346 "IBX PCH HDMI %c still using transcoder B\n", 1347 port_name(port)); 1348 } 1349 1350 static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv, 1351 enum pipe pipe) 1352 { 1353 enum pipe port_pipe; 1354 1355 assert_pch_dp_disabled(dev_priv, pipe, PORT_B, PCH_DP_B); 1356 assert_pch_dp_disabled(dev_priv, pipe, PORT_C, PCH_DP_C); 1357 assert_pch_dp_disabled(dev_priv, pipe, PORT_D, PCH_DP_D); 1358 1359 I915_STATE_WARN(intel_crt_port_enabled(dev_priv, PCH_ADPA, &port_pipe) && 1360 port_pipe == pipe, 1361 "PCH VGA enabled on transcoder %c, should be disabled\n", 1362 pipe_name(pipe)); 1363 1364 I915_STATE_WARN(intel_lvds_port_enabled(dev_priv, PCH_LVDS, &port_pipe) && 1365 port_pipe == pipe, 1366 "PCH LVDS enabled on transcoder %c, should be disabled\n", 1367 pipe_name(pipe)); 1368 1369 /* PCH SDVOB multiplex with HDMIB */ 1370 assert_pch_hdmi_disabled(dev_priv, pipe, PORT_B, PCH_HDMIB); 1371 assert_pch_hdmi_disabled(dev_priv, pipe, PORT_C, PCH_HDMIC); 1372 assert_pch_hdmi_disabled(dev_priv, pipe, PORT_D, PCH_HDMID); 1373 } 1374 1375 static void _vlv_enable_pll(struct intel_crtc *crtc, 1376 const struct intel_crtc_state *pipe_config) 1377 { 1378 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1379 enum pipe pipe = crtc->pipe; 1380 1381 I915_WRITE(DPLL(pipe), pipe_config->dpll_hw_state.dpll); 1382 POSTING_READ(DPLL(pipe)); 1383 udelay(150); 1384 1385 if (intel_wait_for_register(&dev_priv->uncore, 1386 DPLL(pipe), 1387 DPLL_LOCK_VLV, 1388 DPLL_LOCK_VLV, 1389 1)) 1390 DRM_ERROR("DPLL %d failed to lock\n", pipe); 1391 } 1392 1393 static void vlv_enable_pll(struct intel_crtc *crtc, 1394 const struct intel_crtc_state *pipe_config) 1395 { 1396 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1397 enum pipe pipe = crtc->pipe; 1398 1399 assert_pipe_disabled(dev_priv, pipe); 1400 1401 /* PLL is protected by panel, make sure we can write it */ 1402 assert_panel_unlocked(dev_priv, pipe); 1403 1404 if (pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) 1405 _vlv_enable_pll(crtc, pipe_config); 1406 1407 I915_WRITE(DPLL_MD(pipe), pipe_config->dpll_hw_state.dpll_md); 1408 POSTING_READ(DPLL_MD(pipe)); 1409 } 1410 1411 1412 static void _chv_enable_pll(struct intel_crtc *crtc, 1413 const struct intel_crtc_state *pipe_config) 1414 { 1415 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1416 enum pipe pipe = crtc->pipe; 1417 enum dpio_channel port = vlv_pipe_to_channel(pipe); 1418 u32 tmp; 1419 1420 vlv_dpio_get(dev_priv); 1421 1422 /* Enable back the 10bit clock to display controller */ 1423 tmp = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port)); 1424 tmp |= DPIO_DCLKP_EN; 1425 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), tmp); 1426 1427 vlv_dpio_put(dev_priv); 1428 1429 /* 1430 * Need to wait > 100ns between dclkp clock enable bit and PLL enable. 1431 */ 1432 udelay(1); 1433 1434 /* Enable PLL */ 1435 I915_WRITE(DPLL(pipe), pipe_config->dpll_hw_state.dpll); 1436 1437 /* Check PLL is locked */ 1438 if (intel_wait_for_register(&dev_priv->uncore, 1439 DPLL(pipe), DPLL_LOCK_VLV, DPLL_LOCK_VLV, 1440 1)) 1441 DRM_ERROR("PLL %d failed to lock\n", pipe); 1442 } 1443 1444 static void chv_enable_pll(struct intel_crtc *crtc, 1445 const struct intel_crtc_state *pipe_config) 1446 { 1447 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1448 enum pipe pipe = crtc->pipe; 1449 1450 assert_pipe_disabled(dev_priv, pipe); 1451 1452 /* PLL is protected by panel, make sure we can write it */ 1453 assert_panel_unlocked(dev_priv, pipe); 1454 1455 if (pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) 1456 _chv_enable_pll(crtc, pipe_config); 1457 1458 if (pipe != PIPE_A) { 1459 /* 1460 * WaPixelRepeatModeFixForC0:chv 1461 * 1462 * DPLLCMD is AWOL. Use chicken bits to propagate 1463 * the value from DPLLBMD to either pipe B or C. 1464 */ 1465 I915_WRITE(CBR4_VLV, CBR_DPLLBMD_PIPE(pipe)); 1466 I915_WRITE(DPLL_MD(PIPE_B), pipe_config->dpll_hw_state.dpll_md); 1467 I915_WRITE(CBR4_VLV, 0); 1468 dev_priv->chv_dpll_md[pipe] = pipe_config->dpll_hw_state.dpll_md; 1469 1470 /* 1471 * DPLLB VGA mode also seems to cause problems. 1472 * We should always have it disabled. 1473 */ 1474 WARN_ON((I915_READ(DPLL(PIPE_B)) & DPLL_VGA_MODE_DIS) == 0); 1475 } else { 1476 I915_WRITE(DPLL_MD(pipe), pipe_config->dpll_hw_state.dpll_md); 1477 POSTING_READ(DPLL_MD(pipe)); 1478 } 1479 } 1480 1481 static bool i9xx_has_pps(struct drm_i915_private *dev_priv) 1482 { 1483 if (IS_I830(dev_priv)) 1484 return false; 1485 1486 return IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv); 1487 } 1488 1489 static void i9xx_enable_pll(struct intel_crtc *crtc, 1490 const struct intel_crtc_state *crtc_state) 1491 { 1492 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1493 i915_reg_t reg = DPLL(crtc->pipe); 1494 u32 dpll = crtc_state->dpll_hw_state.dpll; 1495 int i; 1496 1497 assert_pipe_disabled(dev_priv, crtc->pipe); 1498 1499 /* PLL is protected by panel, make sure we can write it */ 1500 if (i9xx_has_pps(dev_priv)) 1501 assert_panel_unlocked(dev_priv, crtc->pipe); 1502 1503 /* 1504 * Apparently we need to have VGA mode enabled prior to changing 1505 * the P1/P2 dividers. Otherwise the DPLL will keep using the old 1506 * dividers, even though the register value does change. 1507 */ 1508 I915_WRITE(reg, dpll & ~DPLL_VGA_MODE_DIS); 1509 I915_WRITE(reg, dpll); 1510 1511 /* Wait for the clocks to stabilize. */ 1512 POSTING_READ(reg); 1513 udelay(150); 1514 1515 if (INTEL_GEN(dev_priv) >= 4) { 1516 I915_WRITE(DPLL_MD(crtc->pipe), 1517 crtc_state->dpll_hw_state.dpll_md); 1518 } else { 1519 /* The pixel multiplier can only be updated once the 1520 * DPLL is enabled and the clocks are stable. 1521 * 1522 * So write it again. 1523 */ 1524 I915_WRITE(reg, dpll); 1525 } 1526 1527 /* We do this three times for luck */ 1528 for (i = 0; i < 3; i++) { 1529 I915_WRITE(reg, dpll); 1530 POSTING_READ(reg); 1531 udelay(150); /* wait for warmup */ 1532 } 1533 } 1534 1535 static void i9xx_disable_pll(const struct intel_crtc_state *crtc_state) 1536 { 1537 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 1538 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1539 enum pipe pipe = crtc->pipe; 1540 1541 /* Don't disable pipe or pipe PLLs if needed */ 1542 if (IS_I830(dev_priv)) 1543 return; 1544 1545 /* Make sure the pipe isn't still relying on us */ 1546 assert_pipe_disabled(dev_priv, pipe); 1547 1548 I915_WRITE(DPLL(pipe), DPLL_VGA_MODE_DIS); 1549 POSTING_READ(DPLL(pipe)); 1550 } 1551 1552 static void vlv_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe) 1553 { 1554 u32 val; 1555 1556 /* Make sure the pipe isn't still relying on us */ 1557 assert_pipe_disabled(dev_priv, pipe); 1558 1559 val = DPLL_INTEGRATED_REF_CLK_VLV | 1560 DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS; 1561 if (pipe != PIPE_A) 1562 val |= DPLL_INTEGRATED_CRI_CLK_VLV; 1563 1564 I915_WRITE(DPLL(pipe), val); 1565 POSTING_READ(DPLL(pipe)); 1566 } 1567 1568 static void chv_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe) 1569 { 1570 enum dpio_channel port = vlv_pipe_to_channel(pipe); 1571 u32 val; 1572 1573 /* Make sure the pipe isn't still relying on us */ 1574 assert_pipe_disabled(dev_priv, pipe); 1575 1576 val = DPLL_SSC_REF_CLK_CHV | 1577 DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS; 1578 if (pipe != PIPE_A) 1579 val |= DPLL_INTEGRATED_CRI_CLK_VLV; 1580 1581 I915_WRITE(DPLL(pipe), val); 1582 POSTING_READ(DPLL(pipe)); 1583 1584 vlv_dpio_get(dev_priv); 1585 1586 /* Disable 10bit clock to display controller */ 1587 val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port)); 1588 val &= ~DPIO_DCLKP_EN; 1589 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), val); 1590 1591 vlv_dpio_put(dev_priv); 1592 } 1593 1594 void vlv_wait_port_ready(struct drm_i915_private *dev_priv, 1595 struct intel_digital_port *dport, 1596 unsigned int expected_mask) 1597 { 1598 u32 port_mask; 1599 i915_reg_t dpll_reg; 1600 1601 switch (dport->base.port) { 1602 case PORT_B: 1603 port_mask = DPLL_PORTB_READY_MASK; 1604 dpll_reg = DPLL(0); 1605 break; 1606 case PORT_C: 1607 port_mask = DPLL_PORTC_READY_MASK; 1608 dpll_reg = DPLL(0); 1609 expected_mask <<= 4; 1610 break; 1611 case PORT_D: 1612 port_mask = DPLL_PORTD_READY_MASK; 1613 dpll_reg = DPIO_PHY_STATUS; 1614 break; 1615 default: 1616 BUG(); 1617 } 1618 1619 if (intel_wait_for_register(&dev_priv->uncore, 1620 dpll_reg, port_mask, expected_mask, 1621 1000)) 1622 WARN(1, "timed out waiting for port %c ready: got 0x%x, expected 0x%x\n", 1623 port_name(dport->base.port), 1624 I915_READ(dpll_reg) & port_mask, expected_mask); 1625 } 1626 1627 static void ironlake_enable_pch_transcoder(const struct intel_crtc_state *crtc_state) 1628 { 1629 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 1630 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1631 enum pipe pipe = crtc->pipe; 1632 i915_reg_t reg; 1633 u32 val, pipeconf_val; 1634 1635 /* Make sure PCH DPLL is enabled */ 1636 assert_shared_dpll_enabled(dev_priv, crtc_state->shared_dpll); 1637 1638 /* FDI must be feeding us bits for PCH ports */ 1639 assert_fdi_tx_enabled(dev_priv, pipe); 1640 assert_fdi_rx_enabled(dev_priv, pipe); 1641 1642 if (HAS_PCH_CPT(dev_priv)) { 1643 /* Workaround: Set the timing override bit before enabling the 1644 * pch transcoder. */ 1645 reg = TRANS_CHICKEN2(pipe); 1646 val = I915_READ(reg); 1647 val |= TRANS_CHICKEN2_TIMING_OVERRIDE; 1648 I915_WRITE(reg, val); 1649 } 1650 1651 reg = PCH_TRANSCONF(pipe); 1652 val = I915_READ(reg); 1653 pipeconf_val = I915_READ(PIPECONF(pipe)); 1654 1655 if (HAS_PCH_IBX(dev_priv)) { 1656 /* 1657 * Make the BPC in transcoder be consistent with 1658 * that in pipeconf reg. For HDMI we must use 8bpc 1659 * here for both 8bpc and 12bpc. 1660 */ 1661 val &= ~PIPECONF_BPC_MASK; 1662 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) 1663 val |= PIPECONF_8BPC; 1664 else 1665 val |= pipeconf_val & PIPECONF_BPC_MASK; 1666 } 1667 1668 val &= ~TRANS_INTERLACE_MASK; 1669 if ((pipeconf_val & PIPECONF_INTERLACE_MASK) == PIPECONF_INTERLACED_ILK) { 1670 if (HAS_PCH_IBX(dev_priv) && 1671 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 1672 val |= TRANS_LEGACY_INTERLACED_ILK; 1673 else 1674 val |= TRANS_INTERLACED; 1675 } else { 1676 val |= TRANS_PROGRESSIVE; 1677 } 1678 1679 I915_WRITE(reg, val | TRANS_ENABLE); 1680 if (intel_wait_for_register(&dev_priv->uncore, 1681 reg, TRANS_STATE_ENABLE, TRANS_STATE_ENABLE, 1682 100)) 1683 DRM_ERROR("failed to enable transcoder %c\n", pipe_name(pipe)); 1684 } 1685 1686 static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv, 1687 enum transcoder cpu_transcoder) 1688 { 1689 u32 val, pipeconf_val; 1690 1691 /* FDI must be feeding us bits for PCH ports */ 1692 assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder); 1693 assert_fdi_rx_enabled(dev_priv, PIPE_A); 1694 1695 /* Workaround: set timing override bit. */ 1696 val = I915_READ(TRANS_CHICKEN2(PIPE_A)); 1697 val |= TRANS_CHICKEN2_TIMING_OVERRIDE; 1698 I915_WRITE(TRANS_CHICKEN2(PIPE_A), val); 1699 1700 val = TRANS_ENABLE; 1701 pipeconf_val = I915_READ(PIPECONF(cpu_transcoder)); 1702 1703 if ((pipeconf_val & PIPECONF_INTERLACE_MASK_HSW) == 1704 PIPECONF_INTERLACED_ILK) 1705 val |= TRANS_INTERLACED; 1706 else 1707 val |= TRANS_PROGRESSIVE; 1708 1709 I915_WRITE(LPT_TRANSCONF, val); 1710 if (intel_wait_for_register(&dev_priv->uncore, 1711 LPT_TRANSCONF, 1712 TRANS_STATE_ENABLE, 1713 TRANS_STATE_ENABLE, 1714 100)) 1715 DRM_ERROR("Failed to enable PCH transcoder\n"); 1716 } 1717 1718 static void ironlake_disable_pch_transcoder(struct drm_i915_private *dev_priv, 1719 enum pipe pipe) 1720 { 1721 i915_reg_t reg; 1722 u32 val; 1723 1724 /* FDI relies on the transcoder */ 1725 assert_fdi_tx_disabled(dev_priv, pipe); 1726 assert_fdi_rx_disabled(dev_priv, pipe); 1727 1728 /* Ports must be off as well */ 1729 assert_pch_ports_disabled(dev_priv, pipe); 1730 1731 reg = PCH_TRANSCONF(pipe); 1732 val = I915_READ(reg); 1733 val &= ~TRANS_ENABLE; 1734 I915_WRITE(reg, val); 1735 /* wait for PCH transcoder off, transcoder state */ 1736 if (intel_wait_for_register(&dev_priv->uncore, 1737 reg, TRANS_STATE_ENABLE, 0, 1738 50)) 1739 DRM_ERROR("failed to disable transcoder %c\n", pipe_name(pipe)); 1740 1741 if (HAS_PCH_CPT(dev_priv)) { 1742 /* Workaround: Clear the timing override chicken bit again. */ 1743 reg = TRANS_CHICKEN2(pipe); 1744 val = I915_READ(reg); 1745 val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE; 1746 I915_WRITE(reg, val); 1747 } 1748 } 1749 1750 void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv) 1751 { 1752 u32 val; 1753 1754 val = I915_READ(LPT_TRANSCONF); 1755 val &= ~TRANS_ENABLE; 1756 I915_WRITE(LPT_TRANSCONF, val); 1757 /* wait for PCH transcoder off, transcoder state */ 1758 if (intel_wait_for_register(&dev_priv->uncore, 1759 LPT_TRANSCONF, TRANS_STATE_ENABLE, 0, 1760 50)) 1761 DRM_ERROR("Failed to disable PCH transcoder\n"); 1762 1763 /* Workaround: clear timing override bit. */ 1764 val = I915_READ(TRANS_CHICKEN2(PIPE_A)); 1765 val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE; 1766 I915_WRITE(TRANS_CHICKEN2(PIPE_A), val); 1767 } 1768 1769 enum pipe intel_crtc_pch_transcoder(struct intel_crtc *crtc) 1770 { 1771 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1772 1773 if (HAS_PCH_LPT(dev_priv)) 1774 return PIPE_A; 1775 else 1776 return crtc->pipe; 1777 } 1778 1779 static u32 intel_crtc_max_vblank_count(const struct intel_crtc_state *crtc_state) 1780 { 1781 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 1782 1783 /* 1784 * On i965gm the hardware frame counter reads 1785 * zero when the TV encoder is enabled :( 1786 */ 1787 if (IS_I965GM(dev_priv) && 1788 (crtc_state->output_types & BIT(INTEL_OUTPUT_TVOUT))) 1789 return 0; 1790 1791 if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)) 1792 return 0xffffffff; /* full 32 bit counter */ 1793 else if (INTEL_GEN(dev_priv) >= 3) 1794 return 0xffffff; /* only 24 bits of frame count */ 1795 else 1796 return 0; /* Gen2 doesn't have a hardware frame counter */ 1797 } 1798 1799 static void intel_crtc_vblank_on(const struct intel_crtc_state *crtc_state) 1800 { 1801 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 1802 1803 drm_crtc_set_max_vblank_count(&crtc->base, 1804 intel_crtc_max_vblank_count(crtc_state)); 1805 drm_crtc_vblank_on(&crtc->base); 1806 } 1807 1808 static void intel_enable_pipe(const struct intel_crtc_state *new_crtc_state) 1809 { 1810 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->base.crtc); 1811 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1812 enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; 1813 enum pipe pipe = crtc->pipe; 1814 i915_reg_t reg; 1815 u32 val; 1816 1817 DRM_DEBUG_KMS("enabling pipe %c\n", pipe_name(pipe)); 1818 1819 assert_planes_disabled(crtc); 1820 1821 /* 1822 * A pipe without a PLL won't actually be able to drive bits from 1823 * a plane. On ILK+ the pipe PLLs are integrated, so we don't 1824 * need the check. 1825 */ 1826 if (HAS_GMCH(dev_priv)) { 1827 if (intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI)) 1828 assert_dsi_pll_enabled(dev_priv); 1829 else 1830 assert_pll_enabled(dev_priv, pipe); 1831 } else { 1832 if (new_crtc_state->has_pch_encoder) { 1833 /* if driving the PCH, we need FDI enabled */ 1834 assert_fdi_rx_pll_enabled(dev_priv, 1835 intel_crtc_pch_transcoder(crtc)); 1836 assert_fdi_tx_pll_enabled(dev_priv, 1837 (enum pipe) cpu_transcoder); 1838 } 1839 /* FIXME: assert CPU port conditions for SNB+ */ 1840 } 1841 1842 trace_intel_pipe_enable(crtc); 1843 1844 reg = PIPECONF(cpu_transcoder); 1845 val = I915_READ(reg); 1846 if (val & PIPECONF_ENABLE) { 1847 /* we keep both pipes enabled on 830 */ 1848 WARN_ON(!IS_I830(dev_priv)); 1849 return; 1850 } 1851 1852 I915_WRITE(reg, val | PIPECONF_ENABLE); 1853 POSTING_READ(reg); 1854 1855 /* 1856 * Until the pipe starts PIPEDSL reads will return a stale value, 1857 * which causes an apparent vblank timestamp jump when PIPEDSL 1858 * resets to its proper value. That also messes up the frame count 1859 * when it's derived from the timestamps. So let's wait for the 1860 * pipe to start properly before we call drm_crtc_vblank_on() 1861 */ 1862 if (intel_crtc_max_vblank_count(new_crtc_state) == 0) 1863 intel_wait_for_pipe_scanline_moving(crtc); 1864 } 1865 1866 static void intel_disable_pipe(const struct intel_crtc_state *old_crtc_state) 1867 { 1868 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 1869 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 1870 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; 1871 enum pipe pipe = crtc->pipe; 1872 i915_reg_t reg; 1873 u32 val; 1874 1875 DRM_DEBUG_KMS("disabling pipe %c\n", pipe_name(pipe)); 1876 1877 /* 1878 * Make sure planes won't keep trying to pump pixels to us, 1879 * or we might hang the display. 1880 */ 1881 assert_planes_disabled(crtc); 1882 1883 trace_intel_pipe_disable(crtc); 1884 1885 reg = PIPECONF(cpu_transcoder); 1886 val = I915_READ(reg); 1887 if ((val & PIPECONF_ENABLE) == 0) 1888 return; 1889 1890 /* 1891 * Double wide has implications for planes 1892 * so best keep it disabled when not needed. 1893 */ 1894 if (old_crtc_state->double_wide) 1895 val &= ~PIPECONF_DOUBLE_WIDE; 1896 1897 /* Don't disable pipe or pipe PLLs if needed */ 1898 if (!IS_I830(dev_priv)) 1899 val &= ~PIPECONF_ENABLE; 1900 1901 I915_WRITE(reg, val); 1902 if ((val & PIPECONF_ENABLE) == 0) 1903 intel_wait_for_pipe_off(old_crtc_state); 1904 } 1905 1906 static unsigned int intel_tile_size(const struct drm_i915_private *dev_priv) 1907 { 1908 return IS_GEN(dev_priv, 2) ? 2048 : 4096; 1909 } 1910 1911 static unsigned int 1912 intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane) 1913 { 1914 struct drm_i915_private *dev_priv = to_i915(fb->dev); 1915 unsigned int cpp = fb->format->cpp[color_plane]; 1916 1917 switch (fb->modifier) { 1918 case DRM_FORMAT_MOD_LINEAR: 1919 return intel_tile_size(dev_priv); 1920 case I915_FORMAT_MOD_X_TILED: 1921 if (IS_GEN(dev_priv, 2)) 1922 return 128; 1923 else 1924 return 512; 1925 case I915_FORMAT_MOD_Y_TILED_CCS: 1926 if (color_plane == 1) 1927 return 128; 1928 /* fall through */ 1929 case I915_FORMAT_MOD_Y_TILED: 1930 if (IS_GEN(dev_priv, 2) || HAS_128_BYTE_Y_TILING(dev_priv)) 1931 return 128; 1932 else 1933 return 512; 1934 case I915_FORMAT_MOD_Yf_TILED_CCS: 1935 if (color_plane == 1) 1936 return 128; 1937 /* fall through */ 1938 case I915_FORMAT_MOD_Yf_TILED: 1939 switch (cpp) { 1940 case 1: 1941 return 64; 1942 case 2: 1943 case 4: 1944 return 128; 1945 case 8: 1946 case 16: 1947 return 256; 1948 default: 1949 MISSING_CASE(cpp); 1950 return cpp; 1951 } 1952 break; 1953 default: 1954 MISSING_CASE(fb->modifier); 1955 return cpp; 1956 } 1957 } 1958 1959 static unsigned int 1960 intel_tile_height(const struct drm_framebuffer *fb, int color_plane) 1961 { 1962 return intel_tile_size(to_i915(fb->dev)) / 1963 intel_tile_width_bytes(fb, color_plane); 1964 } 1965 1966 /* Return the tile dimensions in pixel units */ 1967 static void intel_tile_dims(const struct drm_framebuffer *fb, int color_plane, 1968 unsigned int *tile_width, 1969 unsigned int *tile_height) 1970 { 1971 unsigned int tile_width_bytes = intel_tile_width_bytes(fb, color_plane); 1972 unsigned int cpp = fb->format->cpp[color_plane]; 1973 1974 *tile_width = tile_width_bytes / cpp; 1975 *tile_height = intel_tile_size(to_i915(fb->dev)) / tile_width_bytes; 1976 } 1977 1978 unsigned int 1979 intel_fb_align_height(const struct drm_framebuffer *fb, 1980 int color_plane, unsigned int height) 1981 { 1982 unsigned int tile_height = intel_tile_height(fb, color_plane); 1983 1984 return ALIGN(height, tile_height); 1985 } 1986 1987 unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info) 1988 { 1989 unsigned int size = 0; 1990 int i; 1991 1992 for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++) 1993 size += rot_info->plane[i].width * rot_info->plane[i].height; 1994 1995 return size; 1996 } 1997 1998 unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info) 1999 { 2000 unsigned int size = 0; 2001 int i; 2002 2003 for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) 2004 size += rem_info->plane[i].width * rem_info->plane[i].height; 2005 2006 return size; 2007 } 2008 2009 static void 2010 intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, 2011 const struct drm_framebuffer *fb, 2012 unsigned int rotation) 2013 { 2014 view->type = I915_GGTT_VIEW_NORMAL; 2015 if (drm_rotation_90_or_270(rotation)) { 2016 view->type = I915_GGTT_VIEW_ROTATED; 2017 view->rotated = to_intel_framebuffer(fb)->rot_info; 2018 } 2019 } 2020 2021 static unsigned int intel_cursor_alignment(const struct drm_i915_private *dev_priv) 2022 { 2023 if (IS_I830(dev_priv)) 2024 return 16 * 1024; 2025 else if (IS_I85X(dev_priv)) 2026 return 256; 2027 else if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) 2028 return 32; 2029 else 2030 return 4 * 1024; 2031 } 2032 2033 static unsigned int intel_linear_alignment(const struct drm_i915_private *dev_priv) 2034 { 2035 if (INTEL_GEN(dev_priv) >= 9) 2036 return 256 * 1024; 2037 else if (IS_I965G(dev_priv) || IS_I965GM(dev_priv) || 2038 IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 2039 return 128 * 1024; 2040 else if (INTEL_GEN(dev_priv) >= 4) 2041 return 4 * 1024; 2042 else 2043 return 0; 2044 } 2045 2046 static unsigned int intel_surf_alignment(const struct drm_framebuffer *fb, 2047 int color_plane) 2048 { 2049 struct drm_i915_private *dev_priv = to_i915(fb->dev); 2050 2051 /* AUX_DIST needs only 4K alignment */ 2052 if (color_plane == 1) 2053 return 4096; 2054 2055 switch (fb->modifier) { 2056 case DRM_FORMAT_MOD_LINEAR: 2057 return intel_linear_alignment(dev_priv); 2058 case I915_FORMAT_MOD_X_TILED: 2059 if (INTEL_GEN(dev_priv) >= 9) 2060 return 256 * 1024; 2061 return 0; 2062 case I915_FORMAT_MOD_Y_TILED_CCS: 2063 case I915_FORMAT_MOD_Yf_TILED_CCS: 2064 case I915_FORMAT_MOD_Y_TILED: 2065 case I915_FORMAT_MOD_Yf_TILED: 2066 return 1 * 1024 * 1024; 2067 default: 2068 MISSING_CASE(fb->modifier); 2069 return 0; 2070 } 2071 } 2072 2073 static bool intel_plane_uses_fence(const struct intel_plane_state *plane_state) 2074 { 2075 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 2076 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 2077 2078 return INTEL_GEN(dev_priv) < 4 || 2079 (plane->has_fbc && 2080 plane_state->view.type == I915_GGTT_VIEW_NORMAL); 2081 } 2082 2083 struct i915_vma * 2084 intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, 2085 const struct i915_ggtt_view *view, 2086 bool uses_fence, 2087 unsigned long *out_flags) 2088 { 2089 struct drm_device *dev = fb->dev; 2090 struct drm_i915_private *dev_priv = to_i915(dev); 2091 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 2092 intel_wakeref_t wakeref; 2093 struct i915_vma *vma; 2094 unsigned int pinctl; 2095 u32 alignment; 2096 2097 WARN_ON(!mutex_is_locked(&dev->struct_mutex)); 2098 2099 alignment = intel_surf_alignment(fb, 0); 2100 2101 /* Note that the w/a also requires 64 PTE of padding following the 2102 * bo. We currently fill all unused PTE with the shadow page and so 2103 * we should always have valid PTE following the scanout preventing 2104 * the VT-d warning. 2105 */ 2106 if (intel_scanout_needs_vtd_wa(dev_priv) && alignment < 256 * 1024) 2107 alignment = 256 * 1024; 2108 2109 /* 2110 * Global gtt pte registers are special registers which actually forward 2111 * writes to a chunk of system memory. Which means that there is no risk 2112 * that the register values disappear as soon as we call 2113 * intel_runtime_pm_put(), so it is correct to wrap only the 2114 * pin/unpin/fence and not more. 2115 */ 2116 wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm); 2117 i915_gem_object_lock(obj); 2118 2119 atomic_inc(&dev_priv->gpu_error.pending_fb_pin); 2120 2121 pinctl = 0; 2122 2123 /* Valleyview is definitely limited to scanning out the first 2124 * 512MiB. Lets presume this behaviour was inherited from the 2125 * g4x display engine and that all earlier gen are similarly 2126 * limited. Testing suggests that it is a little more 2127 * complicated than this. For example, Cherryview appears quite 2128 * happy to scanout from anywhere within its global aperture. 2129 */ 2130 if (HAS_GMCH(dev_priv)) 2131 pinctl |= PIN_MAPPABLE; 2132 2133 vma = i915_gem_object_pin_to_display_plane(obj, 2134 alignment, view, pinctl); 2135 if (IS_ERR(vma)) 2136 goto err; 2137 2138 if (uses_fence && i915_vma_is_map_and_fenceable(vma)) { 2139 int ret; 2140 2141 /* Install a fence for tiled scan-out. Pre-i965 always needs a 2142 * fence, whereas 965+ only requires a fence if using 2143 * framebuffer compression. For simplicity, we always, when 2144 * possible, install a fence as the cost is not that onerous. 2145 * 2146 * If we fail to fence the tiled scanout, then either the 2147 * modeset will reject the change (which is highly unlikely as 2148 * the affected systems, all but one, do not have unmappable 2149 * space) or we will not be able to enable full powersaving 2150 * techniques (also likely not to apply due to various limits 2151 * FBC and the like impose on the size of the buffer, which 2152 * presumably we violated anyway with this unmappable buffer). 2153 * Anyway, it is presumably better to stumble onwards with 2154 * something and try to run the system in a "less than optimal" 2155 * mode that matches the user configuration. 2156 */ 2157 ret = i915_vma_pin_fence(vma); 2158 if (ret != 0 && INTEL_GEN(dev_priv) < 4) { 2159 i915_gem_object_unpin_from_display_plane(vma); 2160 vma = ERR_PTR(ret); 2161 goto err; 2162 } 2163 2164 if (ret == 0 && vma->fence) 2165 *out_flags |= PLANE_HAS_FENCE; 2166 } 2167 2168 i915_vma_get(vma); 2169 err: 2170 atomic_dec(&dev_priv->gpu_error.pending_fb_pin); 2171 2172 i915_gem_object_unlock(obj); 2173 intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref); 2174 return vma; 2175 } 2176 2177 void intel_unpin_fb_vma(struct i915_vma *vma, unsigned long flags) 2178 { 2179 lockdep_assert_held(&vma->vm->i915->drm.struct_mutex); 2180 2181 i915_gem_object_lock(vma->obj); 2182 if (flags & PLANE_HAS_FENCE) 2183 i915_vma_unpin_fence(vma); 2184 i915_gem_object_unpin_from_display_plane(vma); 2185 i915_gem_object_unlock(vma->obj); 2186 2187 i915_vma_put(vma); 2188 } 2189 2190 static int intel_fb_pitch(const struct drm_framebuffer *fb, int color_plane, 2191 unsigned int rotation) 2192 { 2193 if (drm_rotation_90_or_270(rotation)) 2194 return to_intel_framebuffer(fb)->rotated[color_plane].pitch; 2195 else 2196 return fb->pitches[color_plane]; 2197 } 2198 2199 /* 2200 * Convert the x/y offsets into a linear offset. 2201 * Only valid with 0/180 degree rotation, which is fine since linear 2202 * offset is only used with linear buffers on pre-hsw and tiled buffers 2203 * with gen2/3, and 90/270 degree rotations isn't supported on any of them. 2204 */ 2205 u32 intel_fb_xy_to_linear(int x, int y, 2206 const struct intel_plane_state *state, 2207 int color_plane) 2208 { 2209 const struct drm_framebuffer *fb = state->base.fb; 2210 unsigned int cpp = fb->format->cpp[color_plane]; 2211 unsigned int pitch = state->color_plane[color_plane].stride; 2212 2213 return y * pitch + x * cpp; 2214 } 2215 2216 /* 2217 * Add the x/y offsets derived from fb->offsets[] to the user 2218 * specified plane src x/y offsets. The resulting x/y offsets 2219 * specify the start of scanout from the beginning of the gtt mapping. 2220 */ 2221 void intel_add_fb_offsets(int *x, int *y, 2222 const struct intel_plane_state *state, 2223 int color_plane) 2224 2225 { 2226 *x += state->color_plane[color_plane].x; 2227 *y += state->color_plane[color_plane].y; 2228 } 2229 2230 static u32 intel_adjust_tile_offset(int *x, int *y, 2231 unsigned int tile_width, 2232 unsigned int tile_height, 2233 unsigned int tile_size, 2234 unsigned int pitch_tiles, 2235 u32 old_offset, 2236 u32 new_offset) 2237 { 2238 unsigned int pitch_pixels = pitch_tiles * tile_width; 2239 unsigned int tiles; 2240 2241 WARN_ON(old_offset & (tile_size - 1)); 2242 WARN_ON(new_offset & (tile_size - 1)); 2243 WARN_ON(new_offset > old_offset); 2244 2245 tiles = (old_offset - new_offset) / tile_size; 2246 2247 *y += tiles / pitch_tiles * tile_height; 2248 *x += tiles % pitch_tiles * tile_width; 2249 2250 /* minimize x in case it got needlessly big */ 2251 *y += *x / pitch_pixels * tile_height; 2252 *x %= pitch_pixels; 2253 2254 return new_offset; 2255 } 2256 2257 static bool is_surface_linear(u64 modifier, int color_plane) 2258 { 2259 return modifier == DRM_FORMAT_MOD_LINEAR; 2260 } 2261 2262 static u32 intel_adjust_aligned_offset(int *x, int *y, 2263 const struct drm_framebuffer *fb, 2264 int color_plane, 2265 unsigned int rotation, 2266 unsigned int pitch, 2267 u32 old_offset, u32 new_offset) 2268 { 2269 struct drm_i915_private *dev_priv = to_i915(fb->dev); 2270 unsigned int cpp = fb->format->cpp[color_plane]; 2271 2272 WARN_ON(new_offset > old_offset); 2273 2274 if (!is_surface_linear(fb->modifier, color_plane)) { 2275 unsigned int tile_size, tile_width, tile_height; 2276 unsigned int pitch_tiles; 2277 2278 tile_size = intel_tile_size(dev_priv); 2279 intel_tile_dims(fb, color_plane, &tile_width, &tile_height); 2280 2281 if (drm_rotation_90_or_270(rotation)) { 2282 pitch_tiles = pitch / tile_height; 2283 swap(tile_width, tile_height); 2284 } else { 2285 pitch_tiles = pitch / (tile_width * cpp); 2286 } 2287 2288 intel_adjust_tile_offset(x, y, tile_width, tile_height, 2289 tile_size, pitch_tiles, 2290 old_offset, new_offset); 2291 } else { 2292 old_offset += *y * pitch + *x * cpp; 2293 2294 *y = (old_offset - new_offset) / pitch; 2295 *x = ((old_offset - new_offset) - *y * pitch) / cpp; 2296 } 2297 2298 return new_offset; 2299 } 2300 2301 /* 2302 * Adjust the tile offset by moving the difference into 2303 * the x/y offsets. 2304 */ 2305 static u32 intel_plane_adjust_aligned_offset(int *x, int *y, 2306 const struct intel_plane_state *state, 2307 int color_plane, 2308 u32 old_offset, u32 new_offset) 2309 { 2310 return intel_adjust_aligned_offset(x, y, state->base.fb, color_plane, 2311 state->base.rotation, 2312 state->color_plane[color_plane].stride, 2313 old_offset, new_offset); 2314 } 2315 2316 /* 2317 * Computes the aligned offset to the base tile and adjusts 2318 * x, y. bytes per pixel is assumed to be a power-of-two. 2319 * 2320 * In the 90/270 rotated case, x and y are assumed 2321 * to be already rotated to match the rotated GTT view, and 2322 * pitch is the tile_height aligned framebuffer height. 2323 * 2324 * This function is used when computing the derived information 2325 * under intel_framebuffer, so using any of that information 2326 * here is not allowed. Anything under drm_framebuffer can be 2327 * used. This is why the user has to pass in the pitch since it 2328 * is specified in the rotated orientation. 2329 */ 2330 static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv, 2331 int *x, int *y, 2332 const struct drm_framebuffer *fb, 2333 int color_plane, 2334 unsigned int pitch, 2335 unsigned int rotation, 2336 u32 alignment) 2337 { 2338 unsigned int cpp = fb->format->cpp[color_plane]; 2339 u32 offset, offset_aligned; 2340 2341 if (alignment) 2342 alignment--; 2343 2344 if (!is_surface_linear(fb->modifier, color_plane)) { 2345 unsigned int tile_size, tile_width, tile_height; 2346 unsigned int tile_rows, tiles, pitch_tiles; 2347 2348 tile_size = intel_tile_size(dev_priv); 2349 intel_tile_dims(fb, color_plane, &tile_width, &tile_height); 2350 2351 if (drm_rotation_90_or_270(rotation)) { 2352 pitch_tiles = pitch / tile_height; 2353 swap(tile_width, tile_height); 2354 } else { 2355 pitch_tiles = pitch / (tile_width * cpp); 2356 } 2357 2358 tile_rows = *y / tile_height; 2359 *y %= tile_height; 2360 2361 tiles = *x / tile_width; 2362 *x %= tile_width; 2363 2364 offset = (tile_rows * pitch_tiles + tiles) * tile_size; 2365 offset_aligned = offset & ~alignment; 2366 2367 intel_adjust_tile_offset(x, y, tile_width, tile_height, 2368 tile_size, pitch_tiles, 2369 offset, offset_aligned); 2370 } else { 2371 offset = *y * pitch + *x * cpp; 2372 offset_aligned = offset & ~alignment; 2373 2374 *y = (offset & alignment) / pitch; 2375 *x = ((offset & alignment) - *y * pitch) / cpp; 2376 } 2377 2378 return offset_aligned; 2379 } 2380 2381 static u32 intel_plane_compute_aligned_offset(int *x, int *y, 2382 const struct intel_plane_state *state, 2383 int color_plane) 2384 { 2385 struct intel_plane *intel_plane = to_intel_plane(state->base.plane); 2386 struct drm_i915_private *dev_priv = to_i915(intel_plane->base.dev); 2387 const struct drm_framebuffer *fb = state->base.fb; 2388 unsigned int rotation = state->base.rotation; 2389 int pitch = state->color_plane[color_plane].stride; 2390 u32 alignment; 2391 2392 if (intel_plane->id == PLANE_CURSOR) 2393 alignment = intel_cursor_alignment(dev_priv); 2394 else 2395 alignment = intel_surf_alignment(fb, color_plane); 2396 2397 return intel_compute_aligned_offset(dev_priv, x, y, fb, color_plane, 2398 pitch, rotation, alignment); 2399 } 2400 2401 /* Convert the fb->offset[] into x/y offsets */ 2402 static int intel_fb_offset_to_xy(int *x, int *y, 2403 const struct drm_framebuffer *fb, 2404 int color_plane) 2405 { 2406 struct drm_i915_private *dev_priv = to_i915(fb->dev); 2407 unsigned int height; 2408 2409 if (fb->modifier != DRM_FORMAT_MOD_LINEAR && 2410 fb->offsets[color_plane] % intel_tile_size(dev_priv)) { 2411 DRM_DEBUG_KMS("Misaligned offset 0x%08x for color plane %d\n", 2412 fb->offsets[color_plane], color_plane); 2413 return -EINVAL; 2414 } 2415 2416 height = drm_framebuffer_plane_height(fb->height, fb, color_plane); 2417 height = ALIGN(height, intel_tile_height(fb, color_plane)); 2418 2419 /* Catch potential overflows early */ 2420 if (add_overflows_t(u32, mul_u32_u32(height, fb->pitches[color_plane]), 2421 fb->offsets[color_plane])) { 2422 DRM_DEBUG_KMS("Bad offset 0x%08x or pitch %d for color plane %d\n", 2423 fb->offsets[color_plane], fb->pitches[color_plane], 2424 color_plane); 2425 return -ERANGE; 2426 } 2427 2428 *x = 0; 2429 *y = 0; 2430 2431 intel_adjust_aligned_offset(x, y, 2432 fb, color_plane, DRM_MODE_ROTATE_0, 2433 fb->pitches[color_plane], 2434 fb->offsets[color_plane], 0); 2435 2436 return 0; 2437 } 2438 2439 static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier) 2440 { 2441 switch (fb_modifier) { 2442 case I915_FORMAT_MOD_X_TILED: 2443 return I915_TILING_X; 2444 case I915_FORMAT_MOD_Y_TILED: 2445 case I915_FORMAT_MOD_Y_TILED_CCS: 2446 return I915_TILING_Y; 2447 default: 2448 return I915_TILING_NONE; 2449 } 2450 } 2451 2452 /* 2453 * From the Sky Lake PRM: 2454 * "The Color Control Surface (CCS) contains the compression status of 2455 * the cache-line pairs. The compression state of the cache-line pair 2456 * is specified by 2 bits in the CCS. Each CCS cache-line represents 2457 * an area on the main surface of 16 x16 sets of 128 byte Y-tiled 2458 * cache-line-pairs. CCS is always Y tiled." 2459 * 2460 * Since cache line pairs refers to horizontally adjacent cache lines, 2461 * each cache line in the CCS corresponds to an area of 32x16 cache 2462 * lines on the main surface. Since each pixel is 4 bytes, this gives 2463 * us a ratio of one byte in the CCS for each 8x16 pixels in the 2464 * main surface. 2465 */ 2466 static const struct drm_format_info ccs_formats[] = { 2467 { .format = DRM_FORMAT_XRGB8888, .depth = 24, .num_planes = 2, 2468 .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, }, 2469 { .format = DRM_FORMAT_XBGR8888, .depth = 24, .num_planes = 2, 2470 .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, }, 2471 { .format = DRM_FORMAT_ARGB8888, .depth = 32, .num_planes = 2, 2472 .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, .has_alpha = true, }, 2473 { .format = DRM_FORMAT_ABGR8888, .depth = 32, .num_planes = 2, 2474 .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, .has_alpha = true, }, 2475 }; 2476 2477 static const struct drm_format_info * 2478 lookup_format_info(const struct drm_format_info formats[], 2479 int num_formats, u32 format) 2480 { 2481 int i; 2482 2483 for (i = 0; i < num_formats; i++) { 2484 if (formats[i].format == format) 2485 return &formats[i]; 2486 } 2487 2488 return NULL; 2489 } 2490 2491 static const struct drm_format_info * 2492 intel_get_format_info(const struct drm_mode_fb_cmd2 *cmd) 2493 { 2494 switch (cmd->modifier[0]) { 2495 case I915_FORMAT_MOD_Y_TILED_CCS: 2496 case I915_FORMAT_MOD_Yf_TILED_CCS: 2497 return lookup_format_info(ccs_formats, 2498 ARRAY_SIZE(ccs_formats), 2499 cmd->pixel_format); 2500 default: 2501 return NULL; 2502 } 2503 } 2504 2505 bool is_ccs_modifier(u64 modifier) 2506 { 2507 return modifier == I915_FORMAT_MOD_Y_TILED_CCS || 2508 modifier == I915_FORMAT_MOD_Yf_TILED_CCS; 2509 } 2510 2511 u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv, 2512 u32 pixel_format, u64 modifier) 2513 { 2514 struct intel_crtc *crtc; 2515 struct intel_plane *plane; 2516 2517 /* 2518 * We assume the primary plane for pipe A has 2519 * the highest stride limits of them all. 2520 */ 2521 crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_A); 2522 plane = to_intel_plane(crtc->base.primary); 2523 2524 return plane->max_stride(plane, pixel_format, modifier, 2525 DRM_MODE_ROTATE_0); 2526 } 2527 2528 static 2529 u32 intel_fb_max_stride(struct drm_i915_private *dev_priv, 2530 u32 pixel_format, u64 modifier) 2531 { 2532 /* 2533 * Arbitrary limit for gen4+ chosen to match the 2534 * render engine max stride. 2535 * 2536 * The new CCS hash mode makes remapping impossible 2537 */ 2538 if (!is_ccs_modifier(modifier)) { 2539 if (INTEL_GEN(dev_priv) >= 7) 2540 return 256*1024; 2541 else if (INTEL_GEN(dev_priv) >= 4) 2542 return 128*1024; 2543 } 2544 2545 return intel_plane_fb_max_stride(dev_priv, pixel_format, modifier); 2546 } 2547 2548 static u32 2549 intel_fb_stride_alignment(const struct drm_framebuffer *fb, int color_plane) 2550 { 2551 struct drm_i915_private *dev_priv = to_i915(fb->dev); 2552 2553 if (fb->modifier == DRM_FORMAT_MOD_LINEAR) { 2554 u32 max_stride = intel_plane_fb_max_stride(dev_priv, 2555 fb->format->format, 2556 fb->modifier); 2557 2558 /* 2559 * To make remapping with linear generally feasible 2560 * we need the stride to be page aligned. 2561 */ 2562 if (fb->pitches[color_plane] > max_stride) 2563 return intel_tile_size(dev_priv); 2564 else 2565 return 64; 2566 } else { 2567 return intel_tile_width_bytes(fb, color_plane); 2568 } 2569 } 2570 2571 bool intel_plane_can_remap(const struct intel_plane_state *plane_state) 2572 { 2573 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 2574 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 2575 const struct drm_framebuffer *fb = plane_state->base.fb; 2576 int i; 2577 2578 /* We don't want to deal with remapping with cursors */ 2579 if (plane->id == PLANE_CURSOR) 2580 return false; 2581 2582 /* 2583 * The display engine limits already match/exceed the 2584 * render engine limits, so not much point in remapping. 2585 * Would also need to deal with the fence POT alignment 2586 * and gen2 2KiB GTT tile size. 2587 */ 2588 if (INTEL_GEN(dev_priv) < 4) 2589 return false; 2590 2591 /* 2592 * The new CCS hash mode isn't compatible with remapping as 2593 * the virtual address of the pages affects the compressed data. 2594 */ 2595 if (is_ccs_modifier(fb->modifier)) 2596 return false; 2597 2598 /* Linear needs a page aligned stride for remapping */ 2599 if (fb->modifier == DRM_FORMAT_MOD_LINEAR) { 2600 unsigned int alignment = intel_tile_size(dev_priv) - 1; 2601 2602 for (i = 0; i < fb->format->num_planes; i++) { 2603 if (fb->pitches[i] & alignment) 2604 return false; 2605 } 2606 } 2607 2608 return true; 2609 } 2610 2611 static bool intel_plane_needs_remap(const struct intel_plane_state *plane_state) 2612 { 2613 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 2614 const struct drm_framebuffer *fb = plane_state->base.fb; 2615 unsigned int rotation = plane_state->base.rotation; 2616 u32 stride, max_stride; 2617 2618 /* 2619 * No remapping for invisible planes since we don't have 2620 * an actual source viewport to remap. 2621 */ 2622 if (!plane_state->base.visible) 2623 return false; 2624 2625 if (!intel_plane_can_remap(plane_state)) 2626 return false; 2627 2628 /* 2629 * FIXME: aux plane limits on gen9+ are 2630 * unclear in Bspec, for now no checking. 2631 */ 2632 stride = intel_fb_pitch(fb, 0, rotation); 2633 max_stride = plane->max_stride(plane, fb->format->format, 2634 fb->modifier, rotation); 2635 2636 return stride > max_stride; 2637 } 2638 2639 static int 2640 intel_fill_fb_info(struct drm_i915_private *dev_priv, 2641 struct drm_framebuffer *fb) 2642 { 2643 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); 2644 struct intel_rotation_info *rot_info = &intel_fb->rot_info; 2645 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 2646 u32 gtt_offset_rotated = 0; 2647 unsigned int max_size = 0; 2648 int i, num_planes = fb->format->num_planes; 2649 unsigned int tile_size = intel_tile_size(dev_priv); 2650 2651 for (i = 0; i < num_planes; i++) { 2652 unsigned int width, height; 2653 unsigned int cpp, size; 2654 u32 offset; 2655 int x, y; 2656 int ret; 2657 2658 cpp = fb->format->cpp[i]; 2659 width = drm_framebuffer_plane_width(fb->width, fb, i); 2660 height = drm_framebuffer_plane_height(fb->height, fb, i); 2661 2662 ret = intel_fb_offset_to_xy(&x, &y, fb, i); 2663 if (ret) { 2664 DRM_DEBUG_KMS("bad fb plane %d offset: 0x%x\n", 2665 i, fb->offsets[i]); 2666 return ret; 2667 } 2668 2669 if (is_ccs_modifier(fb->modifier) && i == 1) { 2670 int hsub = fb->format->hsub; 2671 int vsub = fb->format->vsub; 2672 int tile_width, tile_height; 2673 int main_x, main_y; 2674 int ccs_x, ccs_y; 2675 2676 intel_tile_dims(fb, i, &tile_width, &tile_height); 2677 tile_width *= hsub; 2678 tile_height *= vsub; 2679 2680 ccs_x = (x * hsub) % tile_width; 2681 ccs_y = (y * vsub) % tile_height; 2682 main_x = intel_fb->normal[0].x % tile_width; 2683 main_y = intel_fb->normal[0].y % tile_height; 2684 2685 /* 2686 * CCS doesn't have its own x/y offset register, so the intra CCS tile 2687 * x/y offsets must match between CCS and the main surface. 2688 */ 2689 if (main_x != ccs_x || main_y != ccs_y) { 2690 DRM_DEBUG_KMS("Bad CCS x/y (main %d,%d ccs %d,%d) full (main %d,%d ccs %d,%d)\n", 2691 main_x, main_y, 2692 ccs_x, ccs_y, 2693 intel_fb->normal[0].x, 2694 intel_fb->normal[0].y, 2695 x, y); 2696 return -EINVAL; 2697 } 2698 } 2699 2700 /* 2701 * The fence (if used) is aligned to the start of the object 2702 * so having the framebuffer wrap around across the edge of the 2703 * fenced region doesn't really work. We have no API to configure 2704 * the fence start offset within the object (nor could we probably 2705 * on gen2/3). So it's just easier if we just require that the 2706 * fb layout agrees with the fence layout. We already check that the 2707 * fb stride matches the fence stride elsewhere. 2708 */ 2709 if (i == 0 && i915_gem_object_is_tiled(obj) && 2710 (x + width) * cpp > fb->pitches[i]) { 2711 DRM_DEBUG_KMS("bad fb plane %d offset: 0x%x\n", 2712 i, fb->offsets[i]); 2713 return -EINVAL; 2714 } 2715 2716 /* 2717 * First pixel of the framebuffer from 2718 * the start of the normal gtt mapping. 2719 */ 2720 intel_fb->normal[i].x = x; 2721 intel_fb->normal[i].y = y; 2722 2723 offset = intel_compute_aligned_offset(dev_priv, &x, &y, fb, i, 2724 fb->pitches[i], 2725 DRM_MODE_ROTATE_0, 2726 tile_size); 2727 offset /= tile_size; 2728 2729 if (!is_surface_linear(fb->modifier, i)) { 2730 unsigned int tile_width, tile_height; 2731 unsigned int pitch_tiles; 2732 struct drm_rect r; 2733 2734 intel_tile_dims(fb, i, &tile_width, &tile_height); 2735 2736 rot_info->plane[i].offset = offset; 2737 rot_info->plane[i].stride = DIV_ROUND_UP(fb->pitches[i], tile_width * cpp); 2738 rot_info->plane[i].width = DIV_ROUND_UP(x + width, tile_width); 2739 rot_info->plane[i].height = DIV_ROUND_UP(y + height, tile_height); 2740 2741 intel_fb->rotated[i].pitch = 2742 rot_info->plane[i].height * tile_height; 2743 2744 /* how many tiles does this plane need */ 2745 size = rot_info->plane[i].stride * rot_info->plane[i].height; 2746 /* 2747 * If the plane isn't horizontally tile aligned, 2748 * we need one more tile. 2749 */ 2750 if (x != 0) 2751 size++; 2752 2753 /* rotate the x/y offsets to match the GTT view */ 2754 r.x1 = x; 2755 r.y1 = y; 2756 r.x2 = x + width; 2757 r.y2 = y + height; 2758 drm_rect_rotate(&r, 2759 rot_info->plane[i].width * tile_width, 2760 rot_info->plane[i].height * tile_height, 2761 DRM_MODE_ROTATE_270); 2762 x = r.x1; 2763 y = r.y1; 2764 2765 /* rotate the tile dimensions to match the GTT view */ 2766 pitch_tiles = intel_fb->rotated[i].pitch / tile_height; 2767 swap(tile_width, tile_height); 2768 2769 /* 2770 * We only keep the x/y offsets, so push all of the 2771 * gtt offset into the x/y offsets. 2772 */ 2773 intel_adjust_tile_offset(&x, &y, 2774 tile_width, tile_height, 2775 tile_size, pitch_tiles, 2776 gtt_offset_rotated * tile_size, 0); 2777 2778 gtt_offset_rotated += rot_info->plane[i].width * rot_info->plane[i].height; 2779 2780 /* 2781 * First pixel of the framebuffer from 2782 * the start of the rotated gtt mapping. 2783 */ 2784 intel_fb->rotated[i].x = x; 2785 intel_fb->rotated[i].y = y; 2786 } else { 2787 size = DIV_ROUND_UP((y + height) * fb->pitches[i] + 2788 x * cpp, tile_size); 2789 } 2790 2791 /* how many tiles in total needed in the bo */ 2792 max_size = max(max_size, offset + size); 2793 } 2794 2795 if (mul_u32_u32(max_size, tile_size) > obj->base.size) { 2796 DRM_DEBUG_KMS("fb too big for bo (need %llu bytes, have %zu bytes)\n", 2797 mul_u32_u32(max_size, tile_size), obj->base.size); 2798 return -EINVAL; 2799 } 2800 2801 return 0; 2802 } 2803 2804 static void 2805 intel_plane_remap_gtt(struct intel_plane_state *plane_state) 2806 { 2807 struct drm_i915_private *dev_priv = 2808 to_i915(plane_state->base.plane->dev); 2809 struct drm_framebuffer *fb = plane_state->base.fb; 2810 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); 2811 struct intel_rotation_info *info = &plane_state->view.rotated; 2812 unsigned int rotation = plane_state->base.rotation; 2813 int i, num_planes = fb->format->num_planes; 2814 unsigned int tile_size = intel_tile_size(dev_priv); 2815 unsigned int src_x, src_y; 2816 unsigned int src_w, src_h; 2817 u32 gtt_offset = 0; 2818 2819 memset(&plane_state->view, 0, sizeof(plane_state->view)); 2820 plane_state->view.type = drm_rotation_90_or_270(rotation) ? 2821 I915_GGTT_VIEW_ROTATED : I915_GGTT_VIEW_REMAPPED; 2822 2823 src_x = plane_state->base.src.x1 >> 16; 2824 src_y = plane_state->base.src.y1 >> 16; 2825 src_w = drm_rect_width(&plane_state->base.src) >> 16; 2826 src_h = drm_rect_height(&plane_state->base.src) >> 16; 2827 2828 WARN_ON(is_ccs_modifier(fb->modifier)); 2829 2830 /* Make src coordinates relative to the viewport */ 2831 drm_rect_translate(&plane_state->base.src, 2832 -(src_x << 16), -(src_y << 16)); 2833 2834 /* Rotate src coordinates to match rotated GTT view */ 2835 if (drm_rotation_90_or_270(rotation)) 2836 drm_rect_rotate(&plane_state->base.src, 2837 src_w << 16, src_h << 16, 2838 DRM_MODE_ROTATE_270); 2839 2840 for (i = 0; i < num_planes; i++) { 2841 unsigned int hsub = i ? fb->format->hsub : 1; 2842 unsigned int vsub = i ? fb->format->vsub : 1; 2843 unsigned int cpp = fb->format->cpp[i]; 2844 unsigned int tile_width, tile_height; 2845 unsigned int width, height; 2846 unsigned int pitch_tiles; 2847 unsigned int x, y; 2848 u32 offset; 2849 2850 intel_tile_dims(fb, i, &tile_width, &tile_height); 2851 2852 x = src_x / hsub; 2853 y = src_y / vsub; 2854 width = src_w / hsub; 2855 height = src_h / vsub; 2856 2857 /* 2858 * First pixel of the src viewport from the 2859 * start of the normal gtt mapping. 2860 */ 2861 x += intel_fb->normal[i].x; 2862 y += intel_fb->normal[i].y; 2863 2864 offset = intel_compute_aligned_offset(dev_priv, &x, &y, 2865 fb, i, fb->pitches[i], 2866 DRM_MODE_ROTATE_0, tile_size); 2867 offset /= tile_size; 2868 2869 info->plane[i].offset = offset; 2870 info->plane[i].stride = DIV_ROUND_UP(fb->pitches[i], 2871 tile_width * cpp); 2872 info->plane[i].width = DIV_ROUND_UP(x + width, tile_width); 2873 info->plane[i].height = DIV_ROUND_UP(y + height, tile_height); 2874 2875 if (drm_rotation_90_or_270(rotation)) { 2876 struct drm_rect r; 2877 2878 /* rotate the x/y offsets to match the GTT view */ 2879 r.x1 = x; 2880 r.y1 = y; 2881 r.x2 = x + width; 2882 r.y2 = y + height; 2883 drm_rect_rotate(&r, 2884 info->plane[i].width * tile_width, 2885 info->plane[i].height * tile_height, 2886 DRM_MODE_ROTATE_270); 2887 x = r.x1; 2888 y = r.y1; 2889 2890 pitch_tiles = info->plane[i].height; 2891 plane_state->color_plane[i].stride = pitch_tiles * tile_height; 2892 2893 /* rotate the tile dimensions to match the GTT view */ 2894 swap(tile_width, tile_height); 2895 } else { 2896 pitch_tiles = info->plane[i].width; 2897 plane_state->color_plane[i].stride = pitch_tiles * tile_width * cpp; 2898 } 2899 2900 /* 2901 * We only keep the x/y offsets, so push all of the 2902 * gtt offset into the x/y offsets. 2903 */ 2904 intel_adjust_tile_offset(&x, &y, 2905 tile_width, tile_height, 2906 tile_size, pitch_tiles, 2907 gtt_offset * tile_size, 0); 2908 2909 gtt_offset += info->plane[i].width * info->plane[i].height; 2910 2911 plane_state->color_plane[i].offset = 0; 2912 plane_state->color_plane[i].x = x; 2913 plane_state->color_plane[i].y = y; 2914 } 2915 } 2916 2917 static int 2918 intel_plane_compute_gtt(struct intel_plane_state *plane_state) 2919 { 2920 const struct intel_framebuffer *fb = 2921 to_intel_framebuffer(plane_state->base.fb); 2922 unsigned int rotation = plane_state->base.rotation; 2923 int i, num_planes; 2924 2925 if (!fb) 2926 return 0; 2927 2928 num_planes = fb->base.format->num_planes; 2929 2930 if (intel_plane_needs_remap(plane_state)) { 2931 intel_plane_remap_gtt(plane_state); 2932 2933 /* 2934 * Sometimes even remapping can't overcome 2935 * the stride limitations :( Can happen with 2936 * big plane sizes and suitably misaligned 2937 * offsets. 2938 */ 2939 return intel_plane_check_stride(plane_state); 2940 } 2941 2942 intel_fill_fb_ggtt_view(&plane_state->view, &fb->base, rotation); 2943 2944 for (i = 0; i < num_planes; i++) { 2945 plane_state->color_plane[i].stride = intel_fb_pitch(&fb->base, i, rotation); 2946 plane_state->color_plane[i].offset = 0; 2947 2948 if (drm_rotation_90_or_270(rotation)) { 2949 plane_state->color_plane[i].x = fb->rotated[i].x; 2950 plane_state->color_plane[i].y = fb->rotated[i].y; 2951 } else { 2952 plane_state->color_plane[i].x = fb->normal[i].x; 2953 plane_state->color_plane[i].y = fb->normal[i].y; 2954 } 2955 } 2956 2957 /* Rotate src coordinates to match rotated GTT view */ 2958 if (drm_rotation_90_or_270(rotation)) 2959 drm_rect_rotate(&plane_state->base.src, 2960 fb->base.width << 16, fb->base.height << 16, 2961 DRM_MODE_ROTATE_270); 2962 2963 return intel_plane_check_stride(plane_state); 2964 } 2965 2966 static int i9xx_format_to_fourcc(int format) 2967 { 2968 switch (format) { 2969 case DISPPLANE_8BPP: 2970 return DRM_FORMAT_C8; 2971 case DISPPLANE_BGRX555: 2972 return DRM_FORMAT_XRGB1555; 2973 case DISPPLANE_BGRX565: 2974 return DRM_FORMAT_RGB565; 2975 default: 2976 case DISPPLANE_BGRX888: 2977 return DRM_FORMAT_XRGB8888; 2978 case DISPPLANE_RGBX888: 2979 return DRM_FORMAT_XBGR8888; 2980 case DISPPLANE_BGRX101010: 2981 return DRM_FORMAT_XRGB2101010; 2982 case DISPPLANE_RGBX101010: 2983 return DRM_FORMAT_XBGR2101010; 2984 } 2985 } 2986 2987 int skl_format_to_fourcc(int format, bool rgb_order, bool alpha) 2988 { 2989 switch (format) { 2990 case PLANE_CTL_FORMAT_RGB_565: 2991 return DRM_FORMAT_RGB565; 2992 case PLANE_CTL_FORMAT_NV12: 2993 return DRM_FORMAT_NV12; 2994 case PLANE_CTL_FORMAT_P010: 2995 return DRM_FORMAT_P010; 2996 case PLANE_CTL_FORMAT_P012: 2997 return DRM_FORMAT_P012; 2998 case PLANE_CTL_FORMAT_P016: 2999 return DRM_FORMAT_P016; 3000 case PLANE_CTL_FORMAT_Y210: 3001 return DRM_FORMAT_Y210; 3002 case PLANE_CTL_FORMAT_Y212: 3003 return DRM_FORMAT_Y212; 3004 case PLANE_CTL_FORMAT_Y216: 3005 return DRM_FORMAT_Y216; 3006 case PLANE_CTL_FORMAT_Y410: 3007 return DRM_FORMAT_XVYU2101010; 3008 case PLANE_CTL_FORMAT_Y412: 3009 return DRM_FORMAT_XVYU12_16161616; 3010 case PLANE_CTL_FORMAT_Y416: 3011 return DRM_FORMAT_XVYU16161616; 3012 default: 3013 case PLANE_CTL_FORMAT_XRGB_8888: 3014 if (rgb_order) { 3015 if (alpha) 3016 return DRM_FORMAT_ABGR8888; 3017 else 3018 return DRM_FORMAT_XBGR8888; 3019 } else { 3020 if (alpha) 3021 return DRM_FORMAT_ARGB8888; 3022 else 3023 return DRM_FORMAT_XRGB8888; 3024 } 3025 case PLANE_CTL_FORMAT_XRGB_2101010: 3026 if (rgb_order) 3027 return DRM_FORMAT_XBGR2101010; 3028 else 3029 return DRM_FORMAT_XRGB2101010; 3030 case PLANE_CTL_FORMAT_XRGB_16161616F: 3031 if (rgb_order) { 3032 if (alpha) 3033 return DRM_FORMAT_ABGR16161616F; 3034 else 3035 return DRM_FORMAT_XBGR16161616F; 3036 } else { 3037 if (alpha) 3038 return DRM_FORMAT_ARGB16161616F; 3039 else 3040 return DRM_FORMAT_XRGB16161616F; 3041 } 3042 } 3043 } 3044 3045 static bool 3046 intel_alloc_initial_plane_obj(struct intel_crtc *crtc, 3047 struct intel_initial_plane_config *plane_config) 3048 { 3049 struct drm_device *dev = crtc->base.dev; 3050 struct drm_i915_private *dev_priv = to_i915(dev); 3051 struct drm_i915_gem_object *obj = NULL; 3052 struct drm_mode_fb_cmd2 mode_cmd = { 0 }; 3053 struct drm_framebuffer *fb = &plane_config->fb->base; 3054 u32 base_aligned = round_down(plane_config->base, PAGE_SIZE); 3055 u32 size_aligned = round_up(plane_config->base + plane_config->size, 3056 PAGE_SIZE); 3057 3058 size_aligned -= base_aligned; 3059 3060 if (plane_config->size == 0) 3061 return false; 3062 3063 /* If the FB is too big, just don't use it since fbdev is not very 3064 * important and we should probably use that space with FBC or other 3065 * features. */ 3066 if (size_aligned * 2 > dev_priv->stolen_usable_size) 3067 return false; 3068 3069 switch (fb->modifier) { 3070 case DRM_FORMAT_MOD_LINEAR: 3071 case I915_FORMAT_MOD_X_TILED: 3072 case I915_FORMAT_MOD_Y_TILED: 3073 break; 3074 default: 3075 DRM_DEBUG_DRIVER("Unsupported modifier for initial FB: 0x%llx\n", 3076 fb->modifier); 3077 return false; 3078 } 3079 3080 mutex_lock(&dev->struct_mutex); 3081 obj = i915_gem_object_create_stolen_for_preallocated(dev_priv, 3082 base_aligned, 3083 base_aligned, 3084 size_aligned); 3085 mutex_unlock(&dev->struct_mutex); 3086 if (!obj) 3087 return false; 3088 3089 switch (plane_config->tiling) { 3090 case I915_TILING_NONE: 3091 break; 3092 case I915_TILING_X: 3093 case I915_TILING_Y: 3094 obj->tiling_and_stride = fb->pitches[0] | plane_config->tiling; 3095 break; 3096 default: 3097 MISSING_CASE(plane_config->tiling); 3098 return false; 3099 } 3100 3101 mode_cmd.pixel_format = fb->format->format; 3102 mode_cmd.width = fb->width; 3103 mode_cmd.height = fb->height; 3104 mode_cmd.pitches[0] = fb->pitches[0]; 3105 mode_cmd.modifier[0] = fb->modifier; 3106 mode_cmd.flags = DRM_MODE_FB_MODIFIERS; 3107 3108 if (intel_framebuffer_init(to_intel_framebuffer(fb), obj, &mode_cmd)) { 3109 DRM_DEBUG_KMS("intel fb init failed\n"); 3110 goto out_unref_obj; 3111 } 3112 3113 3114 DRM_DEBUG_KMS("initial plane fb obj %p\n", obj); 3115 return true; 3116 3117 out_unref_obj: 3118 i915_gem_object_put(obj); 3119 return false; 3120 } 3121 3122 static void 3123 intel_set_plane_visible(struct intel_crtc_state *crtc_state, 3124 struct intel_plane_state *plane_state, 3125 bool visible) 3126 { 3127 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 3128 3129 plane_state->base.visible = visible; 3130 3131 if (visible) 3132 crtc_state->base.plane_mask |= drm_plane_mask(&plane->base); 3133 else 3134 crtc_state->base.plane_mask &= ~drm_plane_mask(&plane->base); 3135 } 3136 3137 static void fixup_active_planes(struct intel_crtc_state *crtc_state) 3138 { 3139 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 3140 struct drm_plane *plane; 3141 3142 /* 3143 * Active_planes aliases if multiple "primary" or cursor planes 3144 * have been used on the same (or wrong) pipe. plane_mask uses 3145 * unique ids, hence we can use that to reconstruct active_planes. 3146 */ 3147 crtc_state->active_planes = 0; 3148 3149 drm_for_each_plane_mask(plane, &dev_priv->drm, 3150 crtc_state->base.plane_mask) 3151 crtc_state->active_planes |= BIT(to_intel_plane(plane)->id); 3152 } 3153 3154 static void intel_plane_disable_noatomic(struct intel_crtc *crtc, 3155 struct intel_plane *plane) 3156 { 3157 struct intel_crtc_state *crtc_state = 3158 to_intel_crtc_state(crtc->base.state); 3159 struct intel_plane_state *plane_state = 3160 to_intel_plane_state(plane->base.state); 3161 3162 DRM_DEBUG_KMS("Disabling [PLANE:%d:%s] on [CRTC:%d:%s]\n", 3163 plane->base.base.id, plane->base.name, 3164 crtc->base.base.id, crtc->base.name); 3165 3166 intel_set_plane_visible(crtc_state, plane_state, false); 3167 fixup_active_planes(crtc_state); 3168 crtc_state->data_rate[plane->id] = 0; 3169 3170 if (plane->id == PLANE_PRIMARY) 3171 intel_pre_disable_primary_noatomic(&crtc->base); 3172 3173 intel_disable_plane(plane, crtc_state); 3174 } 3175 3176 static void 3177 intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, 3178 struct intel_initial_plane_config *plane_config) 3179 { 3180 struct drm_device *dev = intel_crtc->base.dev; 3181 struct drm_i915_private *dev_priv = to_i915(dev); 3182 struct drm_crtc *c; 3183 struct drm_i915_gem_object *obj; 3184 struct drm_plane *primary = intel_crtc->base.primary; 3185 struct drm_plane_state *plane_state = primary->state; 3186 struct intel_plane *intel_plane = to_intel_plane(primary); 3187 struct intel_plane_state *intel_state = 3188 to_intel_plane_state(plane_state); 3189 struct drm_framebuffer *fb; 3190 3191 if (!plane_config->fb) 3192 return; 3193 3194 if (intel_alloc_initial_plane_obj(intel_crtc, plane_config)) { 3195 fb = &plane_config->fb->base; 3196 goto valid_fb; 3197 } 3198 3199 kfree(plane_config->fb); 3200 3201 /* 3202 * Failed to alloc the obj, check to see if we should share 3203 * an fb with another CRTC instead 3204 */ 3205 for_each_crtc(dev, c) { 3206 struct intel_plane_state *state; 3207 3208 if (c == &intel_crtc->base) 3209 continue; 3210 3211 if (!to_intel_crtc(c)->active) 3212 continue; 3213 3214 state = to_intel_plane_state(c->primary->state); 3215 if (!state->vma) 3216 continue; 3217 3218 if (intel_plane_ggtt_offset(state) == plane_config->base) { 3219 fb = state->base.fb; 3220 drm_framebuffer_get(fb); 3221 goto valid_fb; 3222 } 3223 } 3224 3225 /* 3226 * We've failed to reconstruct the BIOS FB. Current display state 3227 * indicates that the primary plane is visible, but has a NULL FB, 3228 * which will lead to problems later if we don't fix it up. The 3229 * simplest solution is to just disable the primary plane now and 3230 * pretend the BIOS never had it enabled. 3231 */ 3232 intel_plane_disable_noatomic(intel_crtc, intel_plane); 3233 3234 return; 3235 3236 valid_fb: 3237 intel_state->base.rotation = plane_config->rotation; 3238 intel_fill_fb_ggtt_view(&intel_state->view, fb, 3239 intel_state->base.rotation); 3240 intel_state->color_plane[0].stride = 3241 intel_fb_pitch(fb, 0, intel_state->base.rotation); 3242 3243 mutex_lock(&dev->struct_mutex); 3244 intel_state->vma = 3245 intel_pin_and_fence_fb_obj(fb, 3246 &intel_state->view, 3247 intel_plane_uses_fence(intel_state), 3248 &intel_state->flags); 3249 mutex_unlock(&dev->struct_mutex); 3250 if (IS_ERR(intel_state->vma)) { 3251 DRM_ERROR("failed to pin boot fb on pipe %d: %li\n", 3252 intel_crtc->pipe, PTR_ERR(intel_state->vma)); 3253 3254 intel_state->vma = NULL; 3255 drm_framebuffer_put(fb); 3256 return; 3257 } 3258 3259 obj = intel_fb_obj(fb); 3260 intel_fb_obj_flush(obj, ORIGIN_DIRTYFB); 3261 3262 plane_state->src_x = 0; 3263 plane_state->src_y = 0; 3264 plane_state->src_w = fb->width << 16; 3265 plane_state->src_h = fb->height << 16; 3266 3267 plane_state->crtc_x = 0; 3268 plane_state->crtc_y = 0; 3269 plane_state->crtc_w = fb->width; 3270 plane_state->crtc_h = fb->height; 3271 3272 intel_state->base.src = drm_plane_state_src(plane_state); 3273 intel_state->base.dst = drm_plane_state_dest(plane_state); 3274 3275 if (i915_gem_object_is_tiled(obj)) 3276 dev_priv->preserve_bios_swizzle = true; 3277 3278 plane_state->fb = fb; 3279 plane_state->crtc = &intel_crtc->base; 3280 3281 atomic_or(to_intel_plane(primary)->frontbuffer_bit, 3282 &obj->frontbuffer_bits); 3283 } 3284 3285 static int skl_max_plane_width(const struct drm_framebuffer *fb, 3286 int color_plane, 3287 unsigned int rotation) 3288 { 3289 int cpp = fb->format->cpp[color_plane]; 3290 3291 switch (fb->modifier) { 3292 case DRM_FORMAT_MOD_LINEAR: 3293 case I915_FORMAT_MOD_X_TILED: 3294 return 4096; 3295 case I915_FORMAT_MOD_Y_TILED_CCS: 3296 case I915_FORMAT_MOD_Yf_TILED_CCS: 3297 /* FIXME AUX plane? */ 3298 case I915_FORMAT_MOD_Y_TILED: 3299 case I915_FORMAT_MOD_Yf_TILED: 3300 if (cpp == 8) 3301 return 2048; 3302 else 3303 return 4096; 3304 default: 3305 MISSING_CASE(fb->modifier); 3306 return 2048; 3307 } 3308 } 3309 3310 static int glk_max_plane_width(const struct drm_framebuffer *fb, 3311 int color_plane, 3312 unsigned int rotation) 3313 { 3314 int cpp = fb->format->cpp[color_plane]; 3315 3316 switch (fb->modifier) { 3317 case DRM_FORMAT_MOD_LINEAR: 3318 case I915_FORMAT_MOD_X_TILED: 3319 if (cpp == 8) 3320 return 4096; 3321 else 3322 return 5120; 3323 case I915_FORMAT_MOD_Y_TILED_CCS: 3324 case I915_FORMAT_MOD_Yf_TILED_CCS: 3325 /* FIXME AUX plane? */ 3326 case I915_FORMAT_MOD_Y_TILED: 3327 case I915_FORMAT_MOD_Yf_TILED: 3328 if (cpp == 8) 3329 return 2048; 3330 else 3331 return 5120; 3332 default: 3333 MISSING_CASE(fb->modifier); 3334 return 2048; 3335 } 3336 } 3337 3338 static int icl_max_plane_width(const struct drm_framebuffer *fb, 3339 int color_plane, 3340 unsigned int rotation) 3341 { 3342 return 5120; 3343 } 3344 3345 static bool skl_check_main_ccs_coordinates(struct intel_plane_state *plane_state, 3346 int main_x, int main_y, u32 main_offset) 3347 { 3348 const struct drm_framebuffer *fb = plane_state->base.fb; 3349 int hsub = fb->format->hsub; 3350 int vsub = fb->format->vsub; 3351 int aux_x = plane_state->color_plane[1].x; 3352 int aux_y = plane_state->color_plane[1].y; 3353 u32 aux_offset = plane_state->color_plane[1].offset; 3354 u32 alignment = intel_surf_alignment(fb, 1); 3355 3356 while (aux_offset >= main_offset && aux_y <= main_y) { 3357 int x, y; 3358 3359 if (aux_x == main_x && aux_y == main_y) 3360 break; 3361 3362 if (aux_offset == 0) 3363 break; 3364 3365 x = aux_x / hsub; 3366 y = aux_y / vsub; 3367 aux_offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 1, 3368 aux_offset, aux_offset - alignment); 3369 aux_x = x * hsub + aux_x % hsub; 3370 aux_y = y * vsub + aux_y % vsub; 3371 } 3372 3373 if (aux_x != main_x || aux_y != main_y) 3374 return false; 3375 3376 plane_state->color_plane[1].offset = aux_offset; 3377 plane_state->color_plane[1].x = aux_x; 3378 plane_state->color_plane[1].y = aux_y; 3379 3380 return true; 3381 } 3382 3383 static int skl_check_main_surface(struct intel_plane_state *plane_state) 3384 { 3385 struct drm_i915_private *dev_priv = to_i915(plane_state->base.plane->dev); 3386 const struct drm_framebuffer *fb = plane_state->base.fb; 3387 unsigned int rotation = plane_state->base.rotation; 3388 int x = plane_state->base.src.x1 >> 16; 3389 int y = plane_state->base.src.y1 >> 16; 3390 int w = drm_rect_width(&plane_state->base.src) >> 16; 3391 int h = drm_rect_height(&plane_state->base.src) >> 16; 3392 int max_width; 3393 int max_height = 4096; 3394 u32 alignment, offset, aux_offset = plane_state->color_plane[1].offset; 3395 3396 if (INTEL_GEN(dev_priv) >= 11) 3397 max_width = icl_max_plane_width(fb, 0, rotation); 3398 else if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 3399 max_width = glk_max_plane_width(fb, 0, rotation); 3400 else 3401 max_width = skl_max_plane_width(fb, 0, rotation); 3402 3403 if (w > max_width || h > max_height) { 3404 DRM_DEBUG_KMS("requested Y/RGB source size %dx%d too big (limit %dx%d)\n", 3405 w, h, max_width, max_height); 3406 return -EINVAL; 3407 } 3408 3409 intel_add_fb_offsets(&x, &y, plane_state, 0); 3410 offset = intel_plane_compute_aligned_offset(&x, &y, plane_state, 0); 3411 alignment = intel_surf_alignment(fb, 0); 3412 3413 /* 3414 * AUX surface offset is specified as the distance from the 3415 * main surface offset, and it must be non-negative. Make 3416 * sure that is what we will get. 3417 */ 3418 if (offset > aux_offset) 3419 offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, 3420 offset, aux_offset & ~(alignment - 1)); 3421 3422 /* 3423 * When using an X-tiled surface, the plane blows up 3424 * if the x offset + width exceed the stride. 3425 * 3426 * TODO: linear and Y-tiled seem fine, Yf untested, 3427 */ 3428 if (fb->modifier == I915_FORMAT_MOD_X_TILED) { 3429 int cpp = fb->format->cpp[0]; 3430 3431 while ((x + w) * cpp > plane_state->color_plane[0].stride) { 3432 if (offset == 0) { 3433 DRM_DEBUG_KMS("Unable to find suitable display surface offset due to X-tiling\n"); 3434 return -EINVAL; 3435 } 3436 3437 offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, 3438 offset, offset - alignment); 3439 } 3440 } 3441 3442 /* 3443 * CCS AUX surface doesn't have its own x/y offsets, we must make sure 3444 * they match with the main surface x/y offsets. 3445 */ 3446 if (is_ccs_modifier(fb->modifier)) { 3447 while (!skl_check_main_ccs_coordinates(plane_state, x, y, offset)) { 3448 if (offset == 0) 3449 break; 3450 3451 offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, 3452 offset, offset - alignment); 3453 } 3454 3455 if (x != plane_state->color_plane[1].x || y != plane_state->color_plane[1].y) { 3456 DRM_DEBUG_KMS("Unable to find suitable display surface offset due to CCS\n"); 3457 return -EINVAL; 3458 } 3459 } 3460 3461 plane_state->color_plane[0].offset = offset; 3462 plane_state->color_plane[0].x = x; 3463 plane_state->color_plane[0].y = y; 3464 3465 /* 3466 * Put the final coordinates back so that the src 3467 * coordinate checks will see the right values. 3468 */ 3469 drm_rect_translate(&plane_state->base.src, 3470 (x << 16) - plane_state->base.src.x1, 3471 (y << 16) - plane_state->base.src.y1); 3472 3473 return 0; 3474 } 3475 3476 static int skl_check_nv12_aux_surface(struct intel_plane_state *plane_state) 3477 { 3478 const struct drm_framebuffer *fb = plane_state->base.fb; 3479 unsigned int rotation = plane_state->base.rotation; 3480 int max_width = skl_max_plane_width(fb, 1, rotation); 3481 int max_height = 4096; 3482 int x = plane_state->base.src.x1 >> 17; 3483 int y = plane_state->base.src.y1 >> 17; 3484 int w = drm_rect_width(&plane_state->base.src) >> 17; 3485 int h = drm_rect_height(&plane_state->base.src) >> 17; 3486 u32 offset; 3487 3488 intel_add_fb_offsets(&x, &y, plane_state, 1); 3489 offset = intel_plane_compute_aligned_offset(&x, &y, plane_state, 1); 3490 3491 /* FIXME not quite sure how/if these apply to the chroma plane */ 3492 if (w > max_width || h > max_height) { 3493 DRM_DEBUG_KMS("CbCr source size %dx%d too big (limit %dx%d)\n", 3494 w, h, max_width, max_height); 3495 return -EINVAL; 3496 } 3497 3498 plane_state->color_plane[1].offset = offset; 3499 plane_state->color_plane[1].x = x; 3500 plane_state->color_plane[1].y = y; 3501 3502 return 0; 3503 } 3504 3505 static int skl_check_ccs_aux_surface(struct intel_plane_state *plane_state) 3506 { 3507 const struct drm_framebuffer *fb = plane_state->base.fb; 3508 int src_x = plane_state->base.src.x1 >> 16; 3509 int src_y = plane_state->base.src.y1 >> 16; 3510 int hsub = fb->format->hsub; 3511 int vsub = fb->format->vsub; 3512 int x = src_x / hsub; 3513 int y = src_y / vsub; 3514 u32 offset; 3515 3516 intel_add_fb_offsets(&x, &y, plane_state, 1); 3517 offset = intel_plane_compute_aligned_offset(&x, &y, plane_state, 1); 3518 3519 plane_state->color_plane[1].offset = offset; 3520 plane_state->color_plane[1].x = x * hsub + src_x % hsub; 3521 plane_state->color_plane[1].y = y * vsub + src_y % vsub; 3522 3523 return 0; 3524 } 3525 3526 int skl_check_plane_surface(struct intel_plane_state *plane_state) 3527 { 3528 const struct drm_framebuffer *fb = plane_state->base.fb; 3529 int ret; 3530 3531 ret = intel_plane_compute_gtt(plane_state); 3532 if (ret) 3533 return ret; 3534 3535 if (!plane_state->base.visible) 3536 return 0; 3537 3538 /* 3539 * Handle the AUX surface first since 3540 * the main surface setup depends on it. 3541 */ 3542 if (is_planar_yuv_format(fb->format->format)) { 3543 ret = skl_check_nv12_aux_surface(plane_state); 3544 if (ret) 3545 return ret; 3546 } else if (is_ccs_modifier(fb->modifier)) { 3547 ret = skl_check_ccs_aux_surface(plane_state); 3548 if (ret) 3549 return ret; 3550 } else { 3551 plane_state->color_plane[1].offset = ~0xfff; 3552 plane_state->color_plane[1].x = 0; 3553 plane_state->color_plane[1].y = 0; 3554 } 3555 3556 ret = skl_check_main_surface(plane_state); 3557 if (ret) 3558 return ret; 3559 3560 return 0; 3561 } 3562 3563 unsigned int 3564 i9xx_plane_max_stride(struct intel_plane *plane, 3565 u32 pixel_format, u64 modifier, 3566 unsigned int rotation) 3567 { 3568 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 3569 3570 if (!HAS_GMCH(dev_priv)) { 3571 return 32*1024; 3572 } else if (INTEL_GEN(dev_priv) >= 4) { 3573 if (modifier == I915_FORMAT_MOD_X_TILED) 3574 return 16*1024; 3575 else 3576 return 32*1024; 3577 } else if (INTEL_GEN(dev_priv) >= 3) { 3578 if (modifier == I915_FORMAT_MOD_X_TILED) 3579 return 8*1024; 3580 else 3581 return 16*1024; 3582 } else { 3583 if (plane->i9xx_plane == PLANE_C) 3584 return 4*1024; 3585 else 3586 return 8*1024; 3587 } 3588 } 3589 3590 static u32 i9xx_plane_ctl_crtc(const struct intel_crtc_state *crtc_state) 3591 { 3592 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 3593 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 3594 u32 dspcntr = 0; 3595 3596 if (crtc_state->gamma_enable) 3597 dspcntr |= DISPPLANE_GAMMA_ENABLE; 3598 3599 if (crtc_state->csc_enable) 3600 dspcntr |= DISPPLANE_PIPE_CSC_ENABLE; 3601 3602 if (INTEL_GEN(dev_priv) < 5) 3603 dspcntr |= DISPPLANE_SEL_PIPE(crtc->pipe); 3604 3605 return dspcntr; 3606 } 3607 3608 static u32 i9xx_plane_ctl(const struct intel_crtc_state *crtc_state, 3609 const struct intel_plane_state *plane_state) 3610 { 3611 struct drm_i915_private *dev_priv = 3612 to_i915(plane_state->base.plane->dev); 3613 const struct drm_framebuffer *fb = plane_state->base.fb; 3614 unsigned int rotation = plane_state->base.rotation; 3615 u32 dspcntr; 3616 3617 dspcntr = DISPLAY_PLANE_ENABLE; 3618 3619 if (IS_G4X(dev_priv) || IS_GEN(dev_priv, 5) || 3620 IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv)) 3621 dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE; 3622 3623 switch (fb->format->format) { 3624 case DRM_FORMAT_C8: 3625 dspcntr |= DISPPLANE_8BPP; 3626 break; 3627 case DRM_FORMAT_XRGB1555: 3628 dspcntr |= DISPPLANE_BGRX555; 3629 break; 3630 case DRM_FORMAT_RGB565: 3631 dspcntr |= DISPPLANE_BGRX565; 3632 break; 3633 case DRM_FORMAT_XRGB8888: 3634 dspcntr |= DISPPLANE_BGRX888; 3635 break; 3636 case DRM_FORMAT_XBGR8888: 3637 dspcntr |= DISPPLANE_RGBX888; 3638 break; 3639 case DRM_FORMAT_XRGB2101010: 3640 dspcntr |= DISPPLANE_BGRX101010; 3641 break; 3642 case DRM_FORMAT_XBGR2101010: 3643 dspcntr |= DISPPLANE_RGBX101010; 3644 break; 3645 default: 3646 MISSING_CASE(fb->format->format); 3647 return 0; 3648 } 3649 3650 if (INTEL_GEN(dev_priv) >= 4 && 3651 fb->modifier == I915_FORMAT_MOD_X_TILED) 3652 dspcntr |= DISPPLANE_TILED; 3653 3654 if (rotation & DRM_MODE_ROTATE_180) 3655 dspcntr |= DISPPLANE_ROTATE_180; 3656 3657 if (rotation & DRM_MODE_REFLECT_X) 3658 dspcntr |= DISPPLANE_MIRROR; 3659 3660 return dspcntr; 3661 } 3662 3663 int i9xx_check_plane_surface(struct intel_plane_state *plane_state) 3664 { 3665 struct drm_i915_private *dev_priv = 3666 to_i915(plane_state->base.plane->dev); 3667 int src_x, src_y; 3668 u32 offset; 3669 int ret; 3670 3671 ret = intel_plane_compute_gtt(plane_state); 3672 if (ret) 3673 return ret; 3674 3675 if (!plane_state->base.visible) 3676 return 0; 3677 3678 src_x = plane_state->base.src.x1 >> 16; 3679 src_y = plane_state->base.src.y1 >> 16; 3680 3681 intel_add_fb_offsets(&src_x, &src_y, plane_state, 0); 3682 3683 if (INTEL_GEN(dev_priv) >= 4) 3684 offset = intel_plane_compute_aligned_offset(&src_x, &src_y, 3685 plane_state, 0); 3686 else 3687 offset = 0; 3688 3689 /* 3690 * Put the final coordinates back so that the src 3691 * coordinate checks will see the right values. 3692 */ 3693 drm_rect_translate(&plane_state->base.src, 3694 (src_x << 16) - plane_state->base.src.x1, 3695 (src_y << 16) - plane_state->base.src.y1); 3696 3697 /* HSW/BDW do this automagically in hardware */ 3698 if (!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv)) { 3699 unsigned int rotation = plane_state->base.rotation; 3700 int src_w = drm_rect_width(&plane_state->base.src) >> 16; 3701 int src_h = drm_rect_height(&plane_state->base.src) >> 16; 3702 3703 if (rotation & DRM_MODE_ROTATE_180) { 3704 src_x += src_w - 1; 3705 src_y += src_h - 1; 3706 } else if (rotation & DRM_MODE_REFLECT_X) { 3707 src_x += src_w - 1; 3708 } 3709 } 3710 3711 plane_state->color_plane[0].offset = offset; 3712 plane_state->color_plane[0].x = src_x; 3713 plane_state->color_plane[0].y = src_y; 3714 3715 return 0; 3716 } 3717 3718 static int 3719 i9xx_plane_check(struct intel_crtc_state *crtc_state, 3720 struct intel_plane_state *plane_state) 3721 { 3722 int ret; 3723 3724 ret = chv_plane_check_rotation(plane_state); 3725 if (ret) 3726 return ret; 3727 3728 ret = drm_atomic_helper_check_plane_state(&plane_state->base, 3729 &crtc_state->base, 3730 DRM_PLANE_HELPER_NO_SCALING, 3731 DRM_PLANE_HELPER_NO_SCALING, 3732 false, true); 3733 if (ret) 3734 return ret; 3735 3736 ret = i9xx_check_plane_surface(plane_state); 3737 if (ret) 3738 return ret; 3739 3740 if (!plane_state->base.visible) 3741 return 0; 3742 3743 ret = intel_plane_check_src_coordinates(plane_state); 3744 if (ret) 3745 return ret; 3746 3747 plane_state->ctl = i9xx_plane_ctl(crtc_state, plane_state); 3748 3749 return 0; 3750 } 3751 3752 static void i9xx_update_plane(struct intel_plane *plane, 3753 const struct intel_crtc_state *crtc_state, 3754 const struct intel_plane_state *plane_state) 3755 { 3756 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 3757 enum i9xx_plane_id i9xx_plane = plane->i9xx_plane; 3758 u32 linear_offset; 3759 int x = plane_state->color_plane[0].x; 3760 int y = plane_state->color_plane[0].y; 3761 unsigned long irqflags; 3762 u32 dspaddr_offset; 3763 u32 dspcntr; 3764 3765 dspcntr = plane_state->ctl | i9xx_plane_ctl_crtc(crtc_state); 3766 3767 linear_offset = intel_fb_xy_to_linear(x, y, plane_state, 0); 3768 3769 if (INTEL_GEN(dev_priv) >= 4) 3770 dspaddr_offset = plane_state->color_plane[0].offset; 3771 else 3772 dspaddr_offset = linear_offset; 3773 3774 spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); 3775 3776 I915_WRITE_FW(DSPSTRIDE(i9xx_plane), plane_state->color_plane[0].stride); 3777 3778 if (INTEL_GEN(dev_priv) < 4) { 3779 /* pipesrc and dspsize control the size that is scaled from, 3780 * which should always be the user's requested size. 3781 */ 3782 I915_WRITE_FW(DSPPOS(i9xx_plane), 0); 3783 I915_WRITE_FW(DSPSIZE(i9xx_plane), 3784 ((crtc_state->pipe_src_h - 1) << 16) | 3785 (crtc_state->pipe_src_w - 1)); 3786 } else if (IS_CHERRYVIEW(dev_priv) && i9xx_plane == PLANE_B) { 3787 I915_WRITE_FW(PRIMPOS(i9xx_plane), 0); 3788 I915_WRITE_FW(PRIMSIZE(i9xx_plane), 3789 ((crtc_state->pipe_src_h - 1) << 16) | 3790 (crtc_state->pipe_src_w - 1)); 3791 I915_WRITE_FW(PRIMCNSTALPHA(i9xx_plane), 0); 3792 } 3793 3794 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 3795 I915_WRITE_FW(DSPOFFSET(i9xx_plane), (y << 16) | x); 3796 } else if (INTEL_GEN(dev_priv) >= 4) { 3797 I915_WRITE_FW(DSPLINOFF(i9xx_plane), linear_offset); 3798 I915_WRITE_FW(DSPTILEOFF(i9xx_plane), (y << 16) | x); 3799 } 3800 3801 /* 3802 * The control register self-arms if the plane was previously 3803 * disabled. Try to make the plane enable atomic by writing 3804 * the control register just before the surface register. 3805 */ 3806 I915_WRITE_FW(DSPCNTR(i9xx_plane), dspcntr); 3807 if (INTEL_GEN(dev_priv) >= 4) 3808 I915_WRITE_FW(DSPSURF(i9xx_plane), 3809 intel_plane_ggtt_offset(plane_state) + 3810 dspaddr_offset); 3811 else 3812 I915_WRITE_FW(DSPADDR(i9xx_plane), 3813 intel_plane_ggtt_offset(plane_state) + 3814 dspaddr_offset); 3815 3816 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); 3817 } 3818 3819 static void i9xx_disable_plane(struct intel_plane *plane, 3820 const struct intel_crtc_state *crtc_state) 3821 { 3822 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 3823 enum i9xx_plane_id i9xx_plane = plane->i9xx_plane; 3824 unsigned long irqflags; 3825 u32 dspcntr; 3826 3827 /* 3828 * DSPCNTR pipe gamma enable on g4x+ and pipe csc 3829 * enable on ilk+ affect the pipe bottom color as 3830 * well, so we must configure them even if the plane 3831 * is disabled. 3832 * 3833 * On pre-g4x there is no way to gamma correct the 3834 * pipe bottom color but we'll keep on doing this 3835 * anyway so that the crtc state readout works correctly. 3836 */ 3837 dspcntr = i9xx_plane_ctl_crtc(crtc_state); 3838 3839 spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); 3840 3841 I915_WRITE_FW(DSPCNTR(i9xx_plane), dspcntr); 3842 if (INTEL_GEN(dev_priv) >= 4) 3843 I915_WRITE_FW(DSPSURF(i9xx_plane), 0); 3844 else 3845 I915_WRITE_FW(DSPADDR(i9xx_plane), 0); 3846 3847 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); 3848 } 3849 3850 static bool i9xx_plane_get_hw_state(struct intel_plane *plane, 3851 enum pipe *pipe) 3852 { 3853 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 3854 enum intel_display_power_domain power_domain; 3855 enum i9xx_plane_id i9xx_plane = plane->i9xx_plane; 3856 intel_wakeref_t wakeref; 3857 bool ret; 3858 u32 val; 3859 3860 /* 3861 * Not 100% correct for planes that can move between pipes, 3862 * but that's only the case for gen2-4 which don't have any 3863 * display power wells. 3864 */ 3865 power_domain = POWER_DOMAIN_PIPE(plane->pipe); 3866 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 3867 if (!wakeref) 3868 return false; 3869 3870 val = I915_READ(DSPCNTR(i9xx_plane)); 3871 3872 ret = val & DISPLAY_PLANE_ENABLE; 3873 3874 if (INTEL_GEN(dev_priv) >= 5) 3875 *pipe = plane->pipe; 3876 else 3877 *pipe = (val & DISPPLANE_SEL_PIPE_MASK) >> 3878 DISPPLANE_SEL_PIPE_SHIFT; 3879 3880 intel_display_power_put(dev_priv, power_domain, wakeref); 3881 3882 return ret; 3883 } 3884 3885 static void skl_detach_scaler(struct intel_crtc *intel_crtc, int id) 3886 { 3887 struct drm_device *dev = intel_crtc->base.dev; 3888 struct drm_i915_private *dev_priv = to_i915(dev); 3889 3890 I915_WRITE(SKL_PS_CTRL(intel_crtc->pipe, id), 0); 3891 I915_WRITE(SKL_PS_WIN_POS(intel_crtc->pipe, id), 0); 3892 I915_WRITE(SKL_PS_WIN_SZ(intel_crtc->pipe, id), 0); 3893 } 3894 3895 /* 3896 * This function detaches (aka. unbinds) unused scalers in hardware 3897 */ 3898 static void skl_detach_scalers(const struct intel_crtc_state *crtc_state) 3899 { 3900 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); 3901 const struct intel_crtc_scaler_state *scaler_state = 3902 &crtc_state->scaler_state; 3903 int i; 3904 3905 /* loop through and disable scalers that aren't in use */ 3906 for (i = 0; i < intel_crtc->num_scalers; i++) { 3907 if (!scaler_state->scalers[i].in_use) 3908 skl_detach_scaler(intel_crtc, i); 3909 } 3910 } 3911 3912 static unsigned int skl_plane_stride_mult(const struct drm_framebuffer *fb, 3913 int color_plane, unsigned int rotation) 3914 { 3915 /* 3916 * The stride is either expressed as a multiple of 64 bytes chunks for 3917 * linear buffers or in number of tiles for tiled buffers. 3918 */ 3919 if (fb->modifier == DRM_FORMAT_MOD_LINEAR) 3920 return 64; 3921 else if (drm_rotation_90_or_270(rotation)) 3922 return intel_tile_height(fb, color_plane); 3923 else 3924 return intel_tile_width_bytes(fb, color_plane); 3925 } 3926 3927 u32 skl_plane_stride(const struct intel_plane_state *plane_state, 3928 int color_plane) 3929 { 3930 const struct drm_framebuffer *fb = plane_state->base.fb; 3931 unsigned int rotation = plane_state->base.rotation; 3932 u32 stride = plane_state->color_plane[color_plane].stride; 3933 3934 if (color_plane >= fb->format->num_planes) 3935 return 0; 3936 3937 return stride / skl_plane_stride_mult(fb, color_plane, rotation); 3938 } 3939 3940 static u32 skl_plane_ctl_format(u32 pixel_format) 3941 { 3942 switch (pixel_format) { 3943 case DRM_FORMAT_C8: 3944 return PLANE_CTL_FORMAT_INDEXED; 3945 case DRM_FORMAT_RGB565: 3946 return PLANE_CTL_FORMAT_RGB_565; 3947 case DRM_FORMAT_XBGR8888: 3948 case DRM_FORMAT_ABGR8888: 3949 return PLANE_CTL_FORMAT_XRGB_8888 | PLANE_CTL_ORDER_RGBX; 3950 case DRM_FORMAT_XRGB8888: 3951 case DRM_FORMAT_ARGB8888: 3952 return PLANE_CTL_FORMAT_XRGB_8888; 3953 case DRM_FORMAT_XRGB2101010: 3954 return PLANE_CTL_FORMAT_XRGB_2101010; 3955 case DRM_FORMAT_XBGR2101010: 3956 return PLANE_CTL_ORDER_RGBX | PLANE_CTL_FORMAT_XRGB_2101010; 3957 case DRM_FORMAT_XBGR16161616F: 3958 case DRM_FORMAT_ABGR16161616F: 3959 return PLANE_CTL_FORMAT_XRGB_16161616F | PLANE_CTL_ORDER_RGBX; 3960 case DRM_FORMAT_XRGB16161616F: 3961 case DRM_FORMAT_ARGB16161616F: 3962 return PLANE_CTL_FORMAT_XRGB_16161616F; 3963 case DRM_FORMAT_YUYV: 3964 return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_YUYV; 3965 case DRM_FORMAT_YVYU: 3966 return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_YVYU; 3967 case DRM_FORMAT_UYVY: 3968 return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_UYVY; 3969 case DRM_FORMAT_VYUY: 3970 return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_VYUY; 3971 case DRM_FORMAT_NV12: 3972 return PLANE_CTL_FORMAT_NV12; 3973 case DRM_FORMAT_P010: 3974 return PLANE_CTL_FORMAT_P010; 3975 case DRM_FORMAT_P012: 3976 return PLANE_CTL_FORMAT_P012; 3977 case DRM_FORMAT_P016: 3978 return PLANE_CTL_FORMAT_P016; 3979 case DRM_FORMAT_Y210: 3980 return PLANE_CTL_FORMAT_Y210; 3981 case DRM_FORMAT_Y212: 3982 return PLANE_CTL_FORMAT_Y212; 3983 case DRM_FORMAT_Y216: 3984 return PLANE_CTL_FORMAT_Y216; 3985 case DRM_FORMAT_XVYU2101010: 3986 return PLANE_CTL_FORMAT_Y410; 3987 case DRM_FORMAT_XVYU12_16161616: 3988 return PLANE_CTL_FORMAT_Y412; 3989 case DRM_FORMAT_XVYU16161616: 3990 return PLANE_CTL_FORMAT_Y416; 3991 default: 3992 MISSING_CASE(pixel_format); 3993 } 3994 3995 return 0; 3996 } 3997 3998 static u32 skl_plane_ctl_alpha(const struct intel_plane_state *plane_state) 3999 { 4000 if (!plane_state->base.fb->format->has_alpha) 4001 return PLANE_CTL_ALPHA_DISABLE; 4002 4003 switch (plane_state->base.pixel_blend_mode) { 4004 case DRM_MODE_BLEND_PIXEL_NONE: 4005 return PLANE_CTL_ALPHA_DISABLE; 4006 case DRM_MODE_BLEND_PREMULTI: 4007 return PLANE_CTL_ALPHA_SW_PREMULTIPLY; 4008 case DRM_MODE_BLEND_COVERAGE: 4009 return PLANE_CTL_ALPHA_HW_PREMULTIPLY; 4010 default: 4011 MISSING_CASE(plane_state->base.pixel_blend_mode); 4012 return PLANE_CTL_ALPHA_DISABLE; 4013 } 4014 } 4015 4016 static u32 glk_plane_color_ctl_alpha(const struct intel_plane_state *plane_state) 4017 { 4018 if (!plane_state->base.fb->format->has_alpha) 4019 return PLANE_COLOR_ALPHA_DISABLE; 4020 4021 switch (plane_state->base.pixel_blend_mode) { 4022 case DRM_MODE_BLEND_PIXEL_NONE: 4023 return PLANE_COLOR_ALPHA_DISABLE; 4024 case DRM_MODE_BLEND_PREMULTI: 4025 return PLANE_COLOR_ALPHA_SW_PREMULTIPLY; 4026 case DRM_MODE_BLEND_COVERAGE: 4027 return PLANE_COLOR_ALPHA_HW_PREMULTIPLY; 4028 default: 4029 MISSING_CASE(plane_state->base.pixel_blend_mode); 4030 return PLANE_COLOR_ALPHA_DISABLE; 4031 } 4032 } 4033 4034 static u32 skl_plane_ctl_tiling(u64 fb_modifier) 4035 { 4036 switch (fb_modifier) { 4037 case DRM_FORMAT_MOD_LINEAR: 4038 break; 4039 case I915_FORMAT_MOD_X_TILED: 4040 return PLANE_CTL_TILED_X; 4041 case I915_FORMAT_MOD_Y_TILED: 4042 return PLANE_CTL_TILED_Y; 4043 case I915_FORMAT_MOD_Y_TILED_CCS: 4044 return PLANE_CTL_TILED_Y | PLANE_CTL_RENDER_DECOMPRESSION_ENABLE; 4045 case I915_FORMAT_MOD_Yf_TILED: 4046 return PLANE_CTL_TILED_YF; 4047 case I915_FORMAT_MOD_Yf_TILED_CCS: 4048 return PLANE_CTL_TILED_YF | PLANE_CTL_RENDER_DECOMPRESSION_ENABLE; 4049 default: 4050 MISSING_CASE(fb_modifier); 4051 } 4052 4053 return 0; 4054 } 4055 4056 static u32 skl_plane_ctl_rotate(unsigned int rotate) 4057 { 4058 switch (rotate) { 4059 case DRM_MODE_ROTATE_0: 4060 break; 4061 /* 4062 * DRM_MODE_ROTATE_ is counter clockwise to stay compatible with Xrandr 4063 * while i915 HW rotation is clockwise, thats why this swapping. 4064 */ 4065 case DRM_MODE_ROTATE_90: 4066 return PLANE_CTL_ROTATE_270; 4067 case DRM_MODE_ROTATE_180: 4068 return PLANE_CTL_ROTATE_180; 4069 case DRM_MODE_ROTATE_270: 4070 return PLANE_CTL_ROTATE_90; 4071 default: 4072 MISSING_CASE(rotate); 4073 } 4074 4075 return 0; 4076 } 4077 4078 static u32 cnl_plane_ctl_flip(unsigned int reflect) 4079 { 4080 switch (reflect) { 4081 case 0: 4082 break; 4083 case DRM_MODE_REFLECT_X: 4084 return PLANE_CTL_FLIP_HORIZONTAL; 4085 case DRM_MODE_REFLECT_Y: 4086 default: 4087 MISSING_CASE(reflect); 4088 } 4089 4090 return 0; 4091 } 4092 4093 u32 skl_plane_ctl_crtc(const struct intel_crtc_state *crtc_state) 4094 { 4095 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 4096 u32 plane_ctl = 0; 4097 4098 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 4099 return plane_ctl; 4100 4101 if (crtc_state->gamma_enable) 4102 plane_ctl |= PLANE_CTL_PIPE_GAMMA_ENABLE; 4103 4104 if (crtc_state->csc_enable) 4105 plane_ctl |= PLANE_CTL_PIPE_CSC_ENABLE; 4106 4107 return plane_ctl; 4108 } 4109 4110 u32 skl_plane_ctl(const struct intel_crtc_state *crtc_state, 4111 const struct intel_plane_state *plane_state) 4112 { 4113 struct drm_i915_private *dev_priv = 4114 to_i915(plane_state->base.plane->dev); 4115 const struct drm_framebuffer *fb = plane_state->base.fb; 4116 unsigned int rotation = plane_state->base.rotation; 4117 const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; 4118 u32 plane_ctl; 4119 4120 plane_ctl = PLANE_CTL_ENABLE; 4121 4122 if (INTEL_GEN(dev_priv) < 10 && !IS_GEMINILAKE(dev_priv)) { 4123 plane_ctl |= skl_plane_ctl_alpha(plane_state); 4124 plane_ctl |= PLANE_CTL_PLANE_GAMMA_DISABLE; 4125 4126 if (plane_state->base.color_encoding == DRM_COLOR_YCBCR_BT709) 4127 plane_ctl |= PLANE_CTL_YUV_TO_RGB_CSC_FORMAT_BT709; 4128 4129 if (plane_state->base.color_range == DRM_COLOR_YCBCR_FULL_RANGE) 4130 plane_ctl |= PLANE_CTL_YUV_RANGE_CORRECTION_DISABLE; 4131 } 4132 4133 plane_ctl |= skl_plane_ctl_format(fb->format->format); 4134 plane_ctl |= skl_plane_ctl_tiling(fb->modifier); 4135 plane_ctl |= skl_plane_ctl_rotate(rotation & DRM_MODE_ROTATE_MASK); 4136 4137 if (INTEL_GEN(dev_priv) >= 10) 4138 plane_ctl |= cnl_plane_ctl_flip(rotation & 4139 DRM_MODE_REFLECT_MASK); 4140 4141 if (key->flags & I915_SET_COLORKEY_DESTINATION) 4142 plane_ctl |= PLANE_CTL_KEY_ENABLE_DESTINATION; 4143 else if (key->flags & I915_SET_COLORKEY_SOURCE) 4144 plane_ctl |= PLANE_CTL_KEY_ENABLE_SOURCE; 4145 4146 return plane_ctl; 4147 } 4148 4149 u32 glk_plane_color_ctl_crtc(const struct intel_crtc_state *crtc_state) 4150 { 4151 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 4152 u32 plane_color_ctl = 0; 4153 4154 if (INTEL_GEN(dev_priv) >= 11) 4155 return plane_color_ctl; 4156 4157 if (crtc_state->gamma_enable) 4158 plane_color_ctl |= PLANE_COLOR_PIPE_GAMMA_ENABLE; 4159 4160 if (crtc_state->csc_enable) 4161 plane_color_ctl |= PLANE_COLOR_PIPE_CSC_ENABLE; 4162 4163 return plane_color_ctl; 4164 } 4165 4166 u32 glk_plane_color_ctl(const struct intel_crtc_state *crtc_state, 4167 const struct intel_plane_state *plane_state) 4168 { 4169 struct drm_i915_private *dev_priv = 4170 to_i915(plane_state->base.plane->dev); 4171 const struct drm_framebuffer *fb = plane_state->base.fb; 4172 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 4173 u32 plane_color_ctl = 0; 4174 4175 plane_color_ctl |= PLANE_COLOR_PLANE_GAMMA_DISABLE; 4176 plane_color_ctl |= glk_plane_color_ctl_alpha(plane_state); 4177 4178 if (fb->format->is_yuv && !icl_is_hdr_plane(dev_priv, plane->id)) { 4179 if (plane_state->base.color_encoding == DRM_COLOR_YCBCR_BT709) 4180 plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709; 4181 else 4182 plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV601_TO_RGB709; 4183 4184 if (plane_state->base.color_range == DRM_COLOR_YCBCR_FULL_RANGE) 4185 plane_color_ctl |= PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE; 4186 } else if (fb->format->is_yuv) { 4187 plane_color_ctl |= PLANE_COLOR_INPUT_CSC_ENABLE; 4188 } 4189 4190 return plane_color_ctl; 4191 } 4192 4193 static int 4194 __intel_display_resume(struct drm_device *dev, 4195 struct drm_atomic_state *state, 4196 struct drm_modeset_acquire_ctx *ctx) 4197 { 4198 struct drm_crtc_state *crtc_state; 4199 struct drm_crtc *crtc; 4200 int i, ret; 4201 4202 intel_modeset_setup_hw_state(dev, ctx); 4203 i915_redisable_vga(to_i915(dev)); 4204 4205 if (!state) 4206 return 0; 4207 4208 /* 4209 * We've duplicated the state, pointers to the old state are invalid. 4210 * 4211 * Don't attempt to use the old state until we commit the duplicated state. 4212 */ 4213 for_each_new_crtc_in_state(state, crtc, crtc_state, i) { 4214 /* 4215 * Force recalculation even if we restore 4216 * current state. With fast modeset this may not result 4217 * in a modeset when the state is compatible. 4218 */ 4219 crtc_state->mode_changed = true; 4220 } 4221 4222 /* ignore any reset values/BIOS leftovers in the WM registers */ 4223 if (!HAS_GMCH(to_i915(dev))) 4224 to_intel_atomic_state(state)->skip_intermediate_wm = true; 4225 4226 ret = drm_atomic_helper_commit_duplicated_state(state, ctx); 4227 4228 WARN_ON(ret == -EDEADLK); 4229 return ret; 4230 } 4231 4232 static bool gpu_reset_clobbers_display(struct drm_i915_private *dev_priv) 4233 { 4234 return (INTEL_INFO(dev_priv)->gpu_reset_clobbers_display && 4235 intel_has_gpu_reset(dev_priv)); 4236 } 4237 4238 void intel_prepare_reset(struct drm_i915_private *dev_priv) 4239 { 4240 struct drm_device *dev = &dev_priv->drm; 4241 struct drm_modeset_acquire_ctx *ctx = &dev_priv->reset_ctx; 4242 struct drm_atomic_state *state; 4243 int ret; 4244 4245 /* reset doesn't touch the display */ 4246 if (!i915_modparams.force_reset_modeset_test && 4247 !gpu_reset_clobbers_display(dev_priv)) 4248 return; 4249 4250 /* We have a modeset vs reset deadlock, defensively unbreak it. */ 4251 set_bit(I915_RESET_MODESET, &dev_priv->gpu_error.flags); 4252 wake_up_all(&dev_priv->gpu_error.wait_queue); 4253 4254 if (atomic_read(&dev_priv->gpu_error.pending_fb_pin)) { 4255 DRM_DEBUG_KMS("Modeset potentially stuck, unbreaking through wedging\n"); 4256 i915_gem_set_wedged(dev_priv); 4257 } 4258 4259 /* 4260 * Need mode_config.mutex so that we don't 4261 * trample ongoing ->detect() and whatnot. 4262 */ 4263 mutex_lock(&dev->mode_config.mutex); 4264 drm_modeset_acquire_init(ctx, 0); 4265 while (1) { 4266 ret = drm_modeset_lock_all_ctx(dev, ctx); 4267 if (ret != -EDEADLK) 4268 break; 4269 4270 drm_modeset_backoff(ctx); 4271 } 4272 /* 4273 * Disabling the crtcs gracefully seems nicer. Also the 4274 * g33 docs say we should at least disable all the planes. 4275 */ 4276 state = drm_atomic_helper_duplicate_state(dev, ctx); 4277 if (IS_ERR(state)) { 4278 ret = PTR_ERR(state); 4279 DRM_ERROR("Duplicating state failed with %i\n", ret); 4280 return; 4281 } 4282 4283 ret = drm_atomic_helper_disable_all(dev, ctx); 4284 if (ret) { 4285 DRM_ERROR("Suspending crtc's failed with %i\n", ret); 4286 drm_atomic_state_put(state); 4287 return; 4288 } 4289 4290 dev_priv->modeset_restore_state = state; 4291 state->acquire_ctx = ctx; 4292 } 4293 4294 void intel_finish_reset(struct drm_i915_private *dev_priv) 4295 { 4296 struct drm_device *dev = &dev_priv->drm; 4297 struct drm_modeset_acquire_ctx *ctx = &dev_priv->reset_ctx; 4298 struct drm_atomic_state *state; 4299 int ret; 4300 4301 /* reset doesn't touch the display */ 4302 if (!test_bit(I915_RESET_MODESET, &dev_priv->gpu_error.flags)) 4303 return; 4304 4305 state = fetch_and_zero(&dev_priv->modeset_restore_state); 4306 if (!state) 4307 goto unlock; 4308 4309 /* reset doesn't touch the display */ 4310 if (!gpu_reset_clobbers_display(dev_priv)) { 4311 /* for testing only restore the display */ 4312 ret = __intel_display_resume(dev, state, ctx); 4313 if (ret) 4314 DRM_ERROR("Restoring old state failed with %i\n", ret); 4315 } else { 4316 /* 4317 * The display has been reset as well, 4318 * so need a full re-initialization. 4319 */ 4320 intel_pps_unlock_regs_wa(dev_priv); 4321 intel_modeset_init_hw(dev); 4322 intel_init_clock_gating(dev_priv); 4323 4324 spin_lock_irq(&dev_priv->irq_lock); 4325 if (dev_priv->display.hpd_irq_setup) 4326 dev_priv->display.hpd_irq_setup(dev_priv); 4327 spin_unlock_irq(&dev_priv->irq_lock); 4328 4329 ret = __intel_display_resume(dev, state, ctx); 4330 if (ret) 4331 DRM_ERROR("Restoring old state failed with %i\n", ret); 4332 4333 intel_hpd_init(dev_priv); 4334 } 4335 4336 drm_atomic_state_put(state); 4337 unlock: 4338 drm_modeset_drop_locks(ctx); 4339 drm_modeset_acquire_fini(ctx); 4340 mutex_unlock(&dev->mode_config.mutex); 4341 4342 clear_bit(I915_RESET_MODESET, &dev_priv->gpu_error.flags); 4343 } 4344 4345 static void icl_set_pipe_chicken(struct intel_crtc *crtc) 4346 { 4347 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 4348 enum pipe pipe = crtc->pipe; 4349 u32 tmp; 4350 4351 tmp = I915_READ(PIPE_CHICKEN(pipe)); 4352 4353 /* 4354 * Display WA #1153: icl 4355 * enable hardware to bypass the alpha math 4356 * and rounding for per-pixel values 00 and 0xff 4357 */ 4358 tmp |= PER_PIXEL_ALPHA_BYPASS_EN; 4359 /* 4360 * Display WA # 1605353570: icl 4361 * Set the pixel rounding bit to 1 for allowing 4362 * passthrough of Frame buffer pixels unmodified 4363 * across pipe 4364 */ 4365 tmp |= PIXEL_ROUNDING_TRUNC_FB_PASSTHRU; 4366 I915_WRITE(PIPE_CHICKEN(pipe), tmp); 4367 } 4368 4369 static void intel_update_pipe_config(const struct intel_crtc_state *old_crtc_state, 4370 const struct intel_crtc_state *new_crtc_state) 4371 { 4372 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->base.crtc); 4373 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 4374 4375 /* drm_atomic_helper_update_legacy_modeset_state might not be called. */ 4376 crtc->base.mode = new_crtc_state->base.mode; 4377 4378 /* 4379 * Update pipe size and adjust fitter if needed: the reason for this is 4380 * that in compute_mode_changes we check the native mode (not the pfit 4381 * mode) to see if we can flip rather than do a full mode set. In the 4382 * fastboot case, we'll flip, but if we don't update the pipesrc and 4383 * pfit state, we'll end up with a big fb scanned out into the wrong 4384 * sized surface. 4385 */ 4386 4387 I915_WRITE(PIPESRC(crtc->pipe), 4388 ((new_crtc_state->pipe_src_w - 1) << 16) | 4389 (new_crtc_state->pipe_src_h - 1)); 4390 4391 /* on skylake this is done by detaching scalers */ 4392 if (INTEL_GEN(dev_priv) >= 9) { 4393 skl_detach_scalers(new_crtc_state); 4394 4395 if (new_crtc_state->pch_pfit.enabled) 4396 skylake_pfit_enable(new_crtc_state); 4397 } else if (HAS_PCH_SPLIT(dev_priv)) { 4398 if (new_crtc_state->pch_pfit.enabled) 4399 ironlake_pfit_enable(new_crtc_state); 4400 else if (old_crtc_state->pch_pfit.enabled) 4401 ironlake_pfit_disable(old_crtc_state); 4402 } 4403 4404 if (INTEL_GEN(dev_priv) >= 11) 4405 icl_set_pipe_chicken(crtc); 4406 } 4407 4408 static void intel_fdi_normal_train(struct intel_crtc *crtc) 4409 { 4410 struct drm_device *dev = crtc->base.dev; 4411 struct drm_i915_private *dev_priv = to_i915(dev); 4412 int pipe = crtc->pipe; 4413 i915_reg_t reg; 4414 u32 temp; 4415 4416 /* enable normal train */ 4417 reg = FDI_TX_CTL(pipe); 4418 temp = I915_READ(reg); 4419 if (IS_IVYBRIDGE(dev_priv)) { 4420 temp &= ~FDI_LINK_TRAIN_NONE_IVB; 4421 temp |= FDI_LINK_TRAIN_NONE_IVB | FDI_TX_ENHANCE_FRAME_ENABLE; 4422 } else { 4423 temp &= ~FDI_LINK_TRAIN_NONE; 4424 temp |= FDI_LINK_TRAIN_NONE | FDI_TX_ENHANCE_FRAME_ENABLE; 4425 } 4426 I915_WRITE(reg, temp); 4427 4428 reg = FDI_RX_CTL(pipe); 4429 temp = I915_READ(reg); 4430 if (HAS_PCH_CPT(dev_priv)) { 4431 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4432 temp |= FDI_LINK_TRAIN_NORMAL_CPT; 4433 } else { 4434 temp &= ~FDI_LINK_TRAIN_NONE; 4435 temp |= FDI_LINK_TRAIN_NONE; 4436 } 4437 I915_WRITE(reg, temp | FDI_RX_ENHANCE_FRAME_ENABLE); 4438 4439 /* wait one idle pattern time */ 4440 POSTING_READ(reg); 4441 udelay(1000); 4442 4443 /* IVB wants error correction enabled */ 4444 if (IS_IVYBRIDGE(dev_priv)) 4445 I915_WRITE(reg, I915_READ(reg) | FDI_FS_ERRC_ENABLE | 4446 FDI_FE_ERRC_ENABLE); 4447 } 4448 4449 /* The FDI link training functions for ILK/Ibexpeak. */ 4450 static void ironlake_fdi_link_train(struct intel_crtc *crtc, 4451 const struct intel_crtc_state *crtc_state) 4452 { 4453 struct drm_device *dev = crtc->base.dev; 4454 struct drm_i915_private *dev_priv = to_i915(dev); 4455 int pipe = crtc->pipe; 4456 i915_reg_t reg; 4457 u32 temp, tries; 4458 4459 /* FDI needs bits from pipe first */ 4460 assert_pipe_enabled(dev_priv, pipe); 4461 4462 /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit 4463 for train result */ 4464 reg = FDI_RX_IMR(pipe); 4465 temp = I915_READ(reg); 4466 temp &= ~FDI_RX_SYMBOL_LOCK; 4467 temp &= ~FDI_RX_BIT_LOCK; 4468 I915_WRITE(reg, temp); 4469 I915_READ(reg); 4470 udelay(150); 4471 4472 /* enable CPU FDI TX and PCH FDI RX */ 4473 reg = FDI_TX_CTL(pipe); 4474 temp = I915_READ(reg); 4475 temp &= ~FDI_DP_PORT_WIDTH_MASK; 4476 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); 4477 temp &= ~FDI_LINK_TRAIN_NONE; 4478 temp |= FDI_LINK_TRAIN_PATTERN_1; 4479 I915_WRITE(reg, temp | FDI_TX_ENABLE); 4480 4481 reg = FDI_RX_CTL(pipe); 4482 temp = I915_READ(reg); 4483 temp &= ~FDI_LINK_TRAIN_NONE; 4484 temp |= FDI_LINK_TRAIN_PATTERN_1; 4485 I915_WRITE(reg, temp | FDI_RX_ENABLE); 4486 4487 POSTING_READ(reg); 4488 udelay(150); 4489 4490 /* Ironlake workaround, enable clock pointer after FDI enable*/ 4491 I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR); 4492 I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR | 4493 FDI_RX_PHASE_SYNC_POINTER_EN); 4494 4495 reg = FDI_RX_IIR(pipe); 4496 for (tries = 0; tries < 5; tries++) { 4497 temp = I915_READ(reg); 4498 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4499 4500 if ((temp & FDI_RX_BIT_LOCK)) { 4501 DRM_DEBUG_KMS("FDI train 1 done.\n"); 4502 I915_WRITE(reg, temp | FDI_RX_BIT_LOCK); 4503 break; 4504 } 4505 } 4506 if (tries == 5) 4507 DRM_ERROR("FDI train 1 fail!\n"); 4508 4509 /* Train 2 */ 4510 reg = FDI_TX_CTL(pipe); 4511 temp = I915_READ(reg); 4512 temp &= ~FDI_LINK_TRAIN_NONE; 4513 temp |= FDI_LINK_TRAIN_PATTERN_2; 4514 I915_WRITE(reg, temp); 4515 4516 reg = FDI_RX_CTL(pipe); 4517 temp = I915_READ(reg); 4518 temp &= ~FDI_LINK_TRAIN_NONE; 4519 temp |= FDI_LINK_TRAIN_PATTERN_2; 4520 I915_WRITE(reg, temp); 4521 4522 POSTING_READ(reg); 4523 udelay(150); 4524 4525 reg = FDI_RX_IIR(pipe); 4526 for (tries = 0; tries < 5; tries++) { 4527 temp = I915_READ(reg); 4528 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4529 4530 if (temp & FDI_RX_SYMBOL_LOCK) { 4531 I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK); 4532 DRM_DEBUG_KMS("FDI train 2 done.\n"); 4533 break; 4534 } 4535 } 4536 if (tries == 5) 4537 DRM_ERROR("FDI train 2 fail!\n"); 4538 4539 DRM_DEBUG_KMS("FDI train done\n"); 4540 4541 } 4542 4543 static const int snb_b_fdi_train_param[] = { 4544 FDI_LINK_TRAIN_400MV_0DB_SNB_B, 4545 FDI_LINK_TRAIN_400MV_6DB_SNB_B, 4546 FDI_LINK_TRAIN_600MV_3_5DB_SNB_B, 4547 FDI_LINK_TRAIN_800MV_0DB_SNB_B, 4548 }; 4549 4550 /* The FDI link training functions for SNB/Cougarpoint. */ 4551 static void gen6_fdi_link_train(struct intel_crtc *crtc, 4552 const struct intel_crtc_state *crtc_state) 4553 { 4554 struct drm_device *dev = crtc->base.dev; 4555 struct drm_i915_private *dev_priv = to_i915(dev); 4556 int pipe = crtc->pipe; 4557 i915_reg_t reg; 4558 u32 temp, i, retry; 4559 4560 /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit 4561 for train result */ 4562 reg = FDI_RX_IMR(pipe); 4563 temp = I915_READ(reg); 4564 temp &= ~FDI_RX_SYMBOL_LOCK; 4565 temp &= ~FDI_RX_BIT_LOCK; 4566 I915_WRITE(reg, temp); 4567 4568 POSTING_READ(reg); 4569 udelay(150); 4570 4571 /* enable CPU FDI TX and PCH FDI RX */ 4572 reg = FDI_TX_CTL(pipe); 4573 temp = I915_READ(reg); 4574 temp &= ~FDI_DP_PORT_WIDTH_MASK; 4575 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); 4576 temp &= ~FDI_LINK_TRAIN_NONE; 4577 temp |= FDI_LINK_TRAIN_PATTERN_1; 4578 temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK; 4579 /* SNB-B */ 4580 temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B; 4581 I915_WRITE(reg, temp | FDI_TX_ENABLE); 4582 4583 I915_WRITE(FDI_RX_MISC(pipe), 4584 FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90); 4585 4586 reg = FDI_RX_CTL(pipe); 4587 temp = I915_READ(reg); 4588 if (HAS_PCH_CPT(dev_priv)) { 4589 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4590 temp |= FDI_LINK_TRAIN_PATTERN_1_CPT; 4591 } else { 4592 temp &= ~FDI_LINK_TRAIN_NONE; 4593 temp |= FDI_LINK_TRAIN_PATTERN_1; 4594 } 4595 I915_WRITE(reg, temp | FDI_RX_ENABLE); 4596 4597 POSTING_READ(reg); 4598 udelay(150); 4599 4600 for (i = 0; i < 4; i++) { 4601 reg = FDI_TX_CTL(pipe); 4602 temp = I915_READ(reg); 4603 temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK; 4604 temp |= snb_b_fdi_train_param[i]; 4605 I915_WRITE(reg, temp); 4606 4607 POSTING_READ(reg); 4608 udelay(500); 4609 4610 for (retry = 0; retry < 5; retry++) { 4611 reg = FDI_RX_IIR(pipe); 4612 temp = I915_READ(reg); 4613 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4614 if (temp & FDI_RX_BIT_LOCK) { 4615 I915_WRITE(reg, temp | FDI_RX_BIT_LOCK); 4616 DRM_DEBUG_KMS("FDI train 1 done.\n"); 4617 break; 4618 } 4619 udelay(50); 4620 } 4621 if (retry < 5) 4622 break; 4623 } 4624 if (i == 4) 4625 DRM_ERROR("FDI train 1 fail!\n"); 4626 4627 /* Train 2 */ 4628 reg = FDI_TX_CTL(pipe); 4629 temp = I915_READ(reg); 4630 temp &= ~FDI_LINK_TRAIN_NONE; 4631 temp |= FDI_LINK_TRAIN_PATTERN_2; 4632 if (IS_GEN(dev_priv, 6)) { 4633 temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK; 4634 /* SNB-B */ 4635 temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B; 4636 } 4637 I915_WRITE(reg, temp); 4638 4639 reg = FDI_RX_CTL(pipe); 4640 temp = I915_READ(reg); 4641 if (HAS_PCH_CPT(dev_priv)) { 4642 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4643 temp |= FDI_LINK_TRAIN_PATTERN_2_CPT; 4644 } else { 4645 temp &= ~FDI_LINK_TRAIN_NONE; 4646 temp |= FDI_LINK_TRAIN_PATTERN_2; 4647 } 4648 I915_WRITE(reg, temp); 4649 4650 POSTING_READ(reg); 4651 udelay(150); 4652 4653 for (i = 0; i < 4; i++) { 4654 reg = FDI_TX_CTL(pipe); 4655 temp = I915_READ(reg); 4656 temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK; 4657 temp |= snb_b_fdi_train_param[i]; 4658 I915_WRITE(reg, temp); 4659 4660 POSTING_READ(reg); 4661 udelay(500); 4662 4663 for (retry = 0; retry < 5; retry++) { 4664 reg = FDI_RX_IIR(pipe); 4665 temp = I915_READ(reg); 4666 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4667 if (temp & FDI_RX_SYMBOL_LOCK) { 4668 I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK); 4669 DRM_DEBUG_KMS("FDI train 2 done.\n"); 4670 break; 4671 } 4672 udelay(50); 4673 } 4674 if (retry < 5) 4675 break; 4676 } 4677 if (i == 4) 4678 DRM_ERROR("FDI train 2 fail!\n"); 4679 4680 DRM_DEBUG_KMS("FDI train done.\n"); 4681 } 4682 4683 /* Manual link training for Ivy Bridge A0 parts */ 4684 static void ivb_manual_fdi_link_train(struct intel_crtc *crtc, 4685 const struct intel_crtc_state *crtc_state) 4686 { 4687 struct drm_device *dev = crtc->base.dev; 4688 struct drm_i915_private *dev_priv = to_i915(dev); 4689 int pipe = crtc->pipe; 4690 i915_reg_t reg; 4691 u32 temp, i, j; 4692 4693 /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit 4694 for train result */ 4695 reg = FDI_RX_IMR(pipe); 4696 temp = I915_READ(reg); 4697 temp &= ~FDI_RX_SYMBOL_LOCK; 4698 temp &= ~FDI_RX_BIT_LOCK; 4699 I915_WRITE(reg, temp); 4700 4701 POSTING_READ(reg); 4702 udelay(150); 4703 4704 DRM_DEBUG_KMS("FDI_RX_IIR before link train 0x%x\n", 4705 I915_READ(FDI_RX_IIR(pipe))); 4706 4707 /* Try each vswing and preemphasis setting twice before moving on */ 4708 for (j = 0; j < ARRAY_SIZE(snb_b_fdi_train_param) * 2; j++) { 4709 /* disable first in case we need to retry */ 4710 reg = FDI_TX_CTL(pipe); 4711 temp = I915_READ(reg); 4712 temp &= ~(FDI_LINK_TRAIN_AUTO | FDI_LINK_TRAIN_NONE_IVB); 4713 temp &= ~FDI_TX_ENABLE; 4714 I915_WRITE(reg, temp); 4715 4716 reg = FDI_RX_CTL(pipe); 4717 temp = I915_READ(reg); 4718 temp &= ~FDI_LINK_TRAIN_AUTO; 4719 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4720 temp &= ~FDI_RX_ENABLE; 4721 I915_WRITE(reg, temp); 4722 4723 /* enable CPU FDI TX and PCH FDI RX */ 4724 reg = FDI_TX_CTL(pipe); 4725 temp = I915_READ(reg); 4726 temp &= ~FDI_DP_PORT_WIDTH_MASK; 4727 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); 4728 temp |= FDI_LINK_TRAIN_PATTERN_1_IVB; 4729 temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK; 4730 temp |= snb_b_fdi_train_param[j/2]; 4731 temp |= FDI_COMPOSITE_SYNC; 4732 I915_WRITE(reg, temp | FDI_TX_ENABLE); 4733 4734 I915_WRITE(FDI_RX_MISC(pipe), 4735 FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90); 4736 4737 reg = FDI_RX_CTL(pipe); 4738 temp = I915_READ(reg); 4739 temp |= FDI_LINK_TRAIN_PATTERN_1_CPT; 4740 temp |= FDI_COMPOSITE_SYNC; 4741 I915_WRITE(reg, temp | FDI_RX_ENABLE); 4742 4743 POSTING_READ(reg); 4744 udelay(1); /* should be 0.5us */ 4745 4746 for (i = 0; i < 4; i++) { 4747 reg = FDI_RX_IIR(pipe); 4748 temp = I915_READ(reg); 4749 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4750 4751 if (temp & FDI_RX_BIT_LOCK || 4752 (I915_READ(reg) & FDI_RX_BIT_LOCK)) { 4753 I915_WRITE(reg, temp | FDI_RX_BIT_LOCK); 4754 DRM_DEBUG_KMS("FDI train 1 done, level %i.\n", 4755 i); 4756 break; 4757 } 4758 udelay(1); /* should be 0.5us */ 4759 } 4760 if (i == 4) { 4761 DRM_DEBUG_KMS("FDI train 1 fail on vswing %d\n", j / 2); 4762 continue; 4763 } 4764 4765 /* Train 2 */ 4766 reg = FDI_TX_CTL(pipe); 4767 temp = I915_READ(reg); 4768 temp &= ~FDI_LINK_TRAIN_NONE_IVB; 4769 temp |= FDI_LINK_TRAIN_PATTERN_2_IVB; 4770 I915_WRITE(reg, temp); 4771 4772 reg = FDI_RX_CTL(pipe); 4773 temp = I915_READ(reg); 4774 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4775 temp |= FDI_LINK_TRAIN_PATTERN_2_CPT; 4776 I915_WRITE(reg, temp); 4777 4778 POSTING_READ(reg); 4779 udelay(2); /* should be 1.5us */ 4780 4781 for (i = 0; i < 4; i++) { 4782 reg = FDI_RX_IIR(pipe); 4783 temp = I915_READ(reg); 4784 DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); 4785 4786 if (temp & FDI_RX_SYMBOL_LOCK || 4787 (I915_READ(reg) & FDI_RX_SYMBOL_LOCK)) { 4788 I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK); 4789 DRM_DEBUG_KMS("FDI train 2 done, level %i.\n", 4790 i); 4791 goto train_done; 4792 } 4793 udelay(2); /* should be 1.5us */ 4794 } 4795 if (i == 4) 4796 DRM_DEBUG_KMS("FDI train 2 fail on vswing %d\n", j / 2); 4797 } 4798 4799 train_done: 4800 DRM_DEBUG_KMS("FDI train done.\n"); 4801 } 4802 4803 static void ironlake_fdi_pll_enable(const struct intel_crtc_state *crtc_state) 4804 { 4805 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); 4806 struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev); 4807 int pipe = intel_crtc->pipe; 4808 i915_reg_t reg; 4809 u32 temp; 4810 4811 /* enable PCH FDI RX PLL, wait warmup plus DMI latency */ 4812 reg = FDI_RX_CTL(pipe); 4813 temp = I915_READ(reg); 4814 temp &= ~(FDI_DP_PORT_WIDTH_MASK | (0x7 << 16)); 4815 temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes); 4816 temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11; 4817 I915_WRITE(reg, temp | FDI_RX_PLL_ENABLE); 4818 4819 POSTING_READ(reg); 4820 udelay(200); 4821 4822 /* Switch from Rawclk to PCDclk */ 4823 temp = I915_READ(reg); 4824 I915_WRITE(reg, temp | FDI_PCDCLK); 4825 4826 POSTING_READ(reg); 4827 udelay(200); 4828 4829 /* Enable CPU FDI TX PLL, always on for Ironlake */ 4830 reg = FDI_TX_CTL(pipe); 4831 temp = I915_READ(reg); 4832 if ((temp & FDI_TX_PLL_ENABLE) == 0) { 4833 I915_WRITE(reg, temp | FDI_TX_PLL_ENABLE); 4834 4835 POSTING_READ(reg); 4836 udelay(100); 4837 } 4838 } 4839 4840 static void ironlake_fdi_pll_disable(struct intel_crtc *intel_crtc) 4841 { 4842 struct drm_device *dev = intel_crtc->base.dev; 4843 struct drm_i915_private *dev_priv = to_i915(dev); 4844 int pipe = intel_crtc->pipe; 4845 i915_reg_t reg; 4846 u32 temp; 4847 4848 /* Switch from PCDclk to Rawclk */ 4849 reg = FDI_RX_CTL(pipe); 4850 temp = I915_READ(reg); 4851 I915_WRITE(reg, temp & ~FDI_PCDCLK); 4852 4853 /* Disable CPU FDI TX PLL */ 4854 reg = FDI_TX_CTL(pipe); 4855 temp = I915_READ(reg); 4856 I915_WRITE(reg, temp & ~FDI_TX_PLL_ENABLE); 4857 4858 POSTING_READ(reg); 4859 udelay(100); 4860 4861 reg = FDI_RX_CTL(pipe); 4862 temp = I915_READ(reg); 4863 I915_WRITE(reg, temp & ~FDI_RX_PLL_ENABLE); 4864 4865 /* Wait for the clocks to turn off. */ 4866 POSTING_READ(reg); 4867 udelay(100); 4868 } 4869 4870 static void ironlake_fdi_disable(struct drm_crtc *crtc) 4871 { 4872 struct drm_device *dev = crtc->dev; 4873 struct drm_i915_private *dev_priv = to_i915(dev); 4874 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 4875 int pipe = intel_crtc->pipe; 4876 i915_reg_t reg; 4877 u32 temp; 4878 4879 /* disable CPU FDI tx and PCH FDI rx */ 4880 reg = FDI_TX_CTL(pipe); 4881 temp = I915_READ(reg); 4882 I915_WRITE(reg, temp & ~FDI_TX_ENABLE); 4883 POSTING_READ(reg); 4884 4885 reg = FDI_RX_CTL(pipe); 4886 temp = I915_READ(reg); 4887 temp &= ~(0x7 << 16); 4888 temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11; 4889 I915_WRITE(reg, temp & ~FDI_RX_ENABLE); 4890 4891 POSTING_READ(reg); 4892 udelay(100); 4893 4894 /* Ironlake workaround, disable clock pointer after downing FDI */ 4895 if (HAS_PCH_IBX(dev_priv)) 4896 I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR); 4897 4898 /* still set train pattern 1 */ 4899 reg = FDI_TX_CTL(pipe); 4900 temp = I915_READ(reg); 4901 temp &= ~FDI_LINK_TRAIN_NONE; 4902 temp |= FDI_LINK_TRAIN_PATTERN_1; 4903 I915_WRITE(reg, temp); 4904 4905 reg = FDI_RX_CTL(pipe); 4906 temp = I915_READ(reg); 4907 if (HAS_PCH_CPT(dev_priv)) { 4908 temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT; 4909 temp |= FDI_LINK_TRAIN_PATTERN_1_CPT; 4910 } else { 4911 temp &= ~FDI_LINK_TRAIN_NONE; 4912 temp |= FDI_LINK_TRAIN_PATTERN_1; 4913 } 4914 /* BPC in FDI rx is consistent with that in PIPECONF */ 4915 temp &= ~(0x07 << 16); 4916 temp |= (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11; 4917 I915_WRITE(reg, temp); 4918 4919 POSTING_READ(reg); 4920 udelay(100); 4921 } 4922 4923 bool intel_has_pending_fb_unpin(struct drm_i915_private *dev_priv) 4924 { 4925 struct drm_crtc *crtc; 4926 bool cleanup_done; 4927 4928 drm_for_each_crtc(crtc, &dev_priv->drm) { 4929 struct drm_crtc_commit *commit; 4930 spin_lock(&crtc->commit_lock); 4931 commit = list_first_entry_or_null(&crtc->commit_list, 4932 struct drm_crtc_commit, commit_entry); 4933 cleanup_done = commit ? 4934 try_wait_for_completion(&commit->cleanup_done) : true; 4935 spin_unlock(&crtc->commit_lock); 4936 4937 if (cleanup_done) 4938 continue; 4939 4940 drm_crtc_wait_one_vblank(crtc); 4941 4942 return true; 4943 } 4944 4945 return false; 4946 } 4947 4948 void lpt_disable_iclkip(struct drm_i915_private *dev_priv) 4949 { 4950 u32 temp; 4951 4952 I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_GATE); 4953 4954 mutex_lock(&dev_priv->sb_lock); 4955 4956 temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK); 4957 temp |= SBI_SSCCTL_DISABLE; 4958 intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK); 4959 4960 mutex_unlock(&dev_priv->sb_lock); 4961 } 4962 4963 /* Program iCLKIP clock to the desired frequency */ 4964 static void lpt_program_iclkip(const struct intel_crtc_state *crtc_state) 4965 { 4966 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 4967 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 4968 int clock = crtc_state->base.adjusted_mode.crtc_clock; 4969 u32 divsel, phaseinc, auxdiv, phasedir = 0; 4970 u32 temp; 4971 4972 lpt_disable_iclkip(dev_priv); 4973 4974 /* The iCLK virtual clock root frequency is in MHz, 4975 * but the adjusted_mode->crtc_clock in in KHz. To get the 4976 * divisors, it is necessary to divide one by another, so we 4977 * convert the virtual clock precision to KHz here for higher 4978 * precision. 4979 */ 4980 for (auxdiv = 0; auxdiv < 2; auxdiv++) { 4981 u32 iclk_virtual_root_freq = 172800 * 1000; 4982 u32 iclk_pi_range = 64; 4983 u32 desired_divisor; 4984 4985 desired_divisor = DIV_ROUND_CLOSEST(iclk_virtual_root_freq, 4986 clock << auxdiv); 4987 divsel = (desired_divisor / iclk_pi_range) - 2; 4988 phaseinc = desired_divisor % iclk_pi_range; 4989 4990 /* 4991 * Near 20MHz is a corner case which is 4992 * out of range for the 7-bit divisor 4993 */ 4994 if (divsel <= 0x7f) 4995 break; 4996 } 4997 4998 /* This should not happen with any sane values */ 4999 WARN_ON(SBI_SSCDIVINTPHASE_DIVSEL(divsel) & 5000 ~SBI_SSCDIVINTPHASE_DIVSEL_MASK); 5001 WARN_ON(SBI_SSCDIVINTPHASE_DIR(phasedir) & 5002 ~SBI_SSCDIVINTPHASE_INCVAL_MASK); 5003 5004 DRM_DEBUG_KMS("iCLKIP clock: found settings for %dKHz refresh rate: auxdiv=%x, divsel=%x, phasedir=%x, phaseinc=%x\n", 5005 clock, 5006 auxdiv, 5007 divsel, 5008 phasedir, 5009 phaseinc); 5010 5011 mutex_lock(&dev_priv->sb_lock); 5012 5013 /* Program SSCDIVINTPHASE6 */ 5014 temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK); 5015 temp &= ~SBI_SSCDIVINTPHASE_DIVSEL_MASK; 5016 temp |= SBI_SSCDIVINTPHASE_DIVSEL(divsel); 5017 temp &= ~SBI_SSCDIVINTPHASE_INCVAL_MASK; 5018 temp |= SBI_SSCDIVINTPHASE_INCVAL(phaseinc); 5019 temp |= SBI_SSCDIVINTPHASE_DIR(phasedir); 5020 temp |= SBI_SSCDIVINTPHASE_PROPAGATE; 5021 intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp, SBI_ICLK); 5022 5023 /* Program SSCAUXDIV */ 5024 temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK); 5025 temp &= ~SBI_SSCAUXDIV_FINALDIV2SEL(1); 5026 temp |= SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv); 5027 intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp, SBI_ICLK); 5028 5029 /* Enable modulator and associated divider */ 5030 temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK); 5031 temp &= ~SBI_SSCCTL_DISABLE; 5032 intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK); 5033 5034 mutex_unlock(&dev_priv->sb_lock); 5035 5036 /* Wait for initialization time */ 5037 udelay(24); 5038 5039 I915_WRITE(PIXCLK_GATE, PIXCLK_GATE_UNGATE); 5040 } 5041 5042 int lpt_get_iclkip(struct drm_i915_private *dev_priv) 5043 { 5044 u32 divsel, phaseinc, auxdiv; 5045 u32 iclk_virtual_root_freq = 172800 * 1000; 5046 u32 iclk_pi_range = 64; 5047 u32 desired_divisor; 5048 u32 temp; 5049 5050 if ((I915_READ(PIXCLK_GATE) & PIXCLK_GATE_UNGATE) == 0) 5051 return 0; 5052 5053 mutex_lock(&dev_priv->sb_lock); 5054 5055 temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK); 5056 if (temp & SBI_SSCCTL_DISABLE) { 5057 mutex_unlock(&dev_priv->sb_lock); 5058 return 0; 5059 } 5060 5061 temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK); 5062 divsel = (temp & SBI_SSCDIVINTPHASE_DIVSEL_MASK) >> 5063 SBI_SSCDIVINTPHASE_DIVSEL_SHIFT; 5064 phaseinc = (temp & SBI_SSCDIVINTPHASE_INCVAL_MASK) >> 5065 SBI_SSCDIVINTPHASE_INCVAL_SHIFT; 5066 5067 temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK); 5068 auxdiv = (temp & SBI_SSCAUXDIV_FINALDIV2SEL_MASK) >> 5069 SBI_SSCAUXDIV_FINALDIV2SEL_SHIFT; 5070 5071 mutex_unlock(&dev_priv->sb_lock); 5072 5073 desired_divisor = (divsel + 2) * iclk_pi_range + phaseinc; 5074 5075 return DIV_ROUND_CLOSEST(iclk_virtual_root_freq, 5076 desired_divisor << auxdiv); 5077 } 5078 5079 static void ironlake_pch_transcoder_set_timings(const struct intel_crtc_state *crtc_state, 5080 enum pipe pch_transcoder) 5081 { 5082 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5083 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5084 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 5085 5086 I915_WRITE(PCH_TRANS_HTOTAL(pch_transcoder), 5087 I915_READ(HTOTAL(cpu_transcoder))); 5088 I915_WRITE(PCH_TRANS_HBLANK(pch_transcoder), 5089 I915_READ(HBLANK(cpu_transcoder))); 5090 I915_WRITE(PCH_TRANS_HSYNC(pch_transcoder), 5091 I915_READ(HSYNC(cpu_transcoder))); 5092 5093 I915_WRITE(PCH_TRANS_VTOTAL(pch_transcoder), 5094 I915_READ(VTOTAL(cpu_transcoder))); 5095 I915_WRITE(PCH_TRANS_VBLANK(pch_transcoder), 5096 I915_READ(VBLANK(cpu_transcoder))); 5097 I915_WRITE(PCH_TRANS_VSYNC(pch_transcoder), 5098 I915_READ(VSYNC(cpu_transcoder))); 5099 I915_WRITE(PCH_TRANS_VSYNCSHIFT(pch_transcoder), 5100 I915_READ(VSYNCSHIFT(cpu_transcoder))); 5101 } 5102 5103 static void cpt_set_fdi_bc_bifurcation(struct drm_i915_private *dev_priv, bool enable) 5104 { 5105 u32 temp; 5106 5107 temp = I915_READ(SOUTH_CHICKEN1); 5108 if (!!(temp & FDI_BC_BIFURCATION_SELECT) == enable) 5109 return; 5110 5111 WARN_ON(I915_READ(FDI_RX_CTL(PIPE_B)) & FDI_RX_ENABLE); 5112 WARN_ON(I915_READ(FDI_RX_CTL(PIPE_C)) & FDI_RX_ENABLE); 5113 5114 temp &= ~FDI_BC_BIFURCATION_SELECT; 5115 if (enable) 5116 temp |= FDI_BC_BIFURCATION_SELECT; 5117 5118 DRM_DEBUG_KMS("%sabling fdi C rx\n", enable ? "en" : "dis"); 5119 I915_WRITE(SOUTH_CHICKEN1, temp); 5120 POSTING_READ(SOUTH_CHICKEN1); 5121 } 5122 5123 static void ivybridge_update_fdi_bc_bifurcation(const struct intel_crtc_state *crtc_state) 5124 { 5125 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5126 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5127 5128 switch (crtc->pipe) { 5129 case PIPE_A: 5130 break; 5131 case PIPE_B: 5132 if (crtc_state->fdi_lanes > 2) 5133 cpt_set_fdi_bc_bifurcation(dev_priv, false); 5134 else 5135 cpt_set_fdi_bc_bifurcation(dev_priv, true); 5136 5137 break; 5138 case PIPE_C: 5139 cpt_set_fdi_bc_bifurcation(dev_priv, true); 5140 5141 break; 5142 default: 5143 BUG(); 5144 } 5145 } 5146 5147 /* 5148 * Finds the encoder associated with the given CRTC. This can only be 5149 * used when we know that the CRTC isn't feeding multiple encoders! 5150 */ 5151 static struct intel_encoder * 5152 intel_get_crtc_new_encoder(const struct intel_atomic_state *state, 5153 const struct intel_crtc_state *crtc_state) 5154 { 5155 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5156 const struct drm_connector_state *connector_state; 5157 const struct drm_connector *connector; 5158 struct intel_encoder *encoder = NULL; 5159 int num_encoders = 0; 5160 int i; 5161 5162 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 5163 if (connector_state->crtc != &crtc->base) 5164 continue; 5165 5166 encoder = to_intel_encoder(connector_state->best_encoder); 5167 num_encoders++; 5168 } 5169 5170 WARN(num_encoders != 1, "%d encoders for pipe %c\n", 5171 num_encoders, pipe_name(crtc->pipe)); 5172 5173 return encoder; 5174 } 5175 5176 /* 5177 * Enable PCH resources required for PCH ports: 5178 * - PCH PLLs 5179 * - FDI training & RX/TX 5180 * - update transcoder timings 5181 * - DP transcoding bits 5182 * - transcoder 5183 */ 5184 static void ironlake_pch_enable(const struct intel_atomic_state *state, 5185 const struct intel_crtc_state *crtc_state) 5186 { 5187 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5188 struct drm_device *dev = crtc->base.dev; 5189 struct drm_i915_private *dev_priv = to_i915(dev); 5190 int pipe = crtc->pipe; 5191 u32 temp; 5192 5193 assert_pch_transcoder_disabled(dev_priv, pipe); 5194 5195 if (IS_IVYBRIDGE(dev_priv)) 5196 ivybridge_update_fdi_bc_bifurcation(crtc_state); 5197 5198 /* Write the TU size bits before fdi link training, so that error 5199 * detection works. */ 5200 I915_WRITE(FDI_RX_TUSIZE1(pipe), 5201 I915_READ(PIPE_DATA_M1(pipe)) & TU_SIZE_MASK); 5202 5203 /* For PCH output, training FDI link */ 5204 dev_priv->display.fdi_link_train(crtc, crtc_state); 5205 5206 /* We need to program the right clock selection before writing the pixel 5207 * mutliplier into the DPLL. */ 5208 if (HAS_PCH_CPT(dev_priv)) { 5209 u32 sel; 5210 5211 temp = I915_READ(PCH_DPLL_SEL); 5212 temp |= TRANS_DPLL_ENABLE(pipe); 5213 sel = TRANS_DPLLB_SEL(pipe); 5214 if (crtc_state->shared_dpll == 5215 intel_get_shared_dpll_by_id(dev_priv, DPLL_ID_PCH_PLL_B)) 5216 temp |= sel; 5217 else 5218 temp &= ~sel; 5219 I915_WRITE(PCH_DPLL_SEL, temp); 5220 } 5221 5222 /* XXX: pch pll's can be enabled any time before we enable the PCH 5223 * transcoder, and we actually should do this to not upset any PCH 5224 * transcoder that already use the clock when we share it. 5225 * 5226 * Note that enable_shared_dpll tries to do the right thing, but 5227 * get_shared_dpll unconditionally resets the pll - we need that to have 5228 * the right LVDS enable sequence. */ 5229 intel_enable_shared_dpll(crtc_state); 5230 5231 /* set transcoder timing, panel must allow it */ 5232 assert_panel_unlocked(dev_priv, pipe); 5233 ironlake_pch_transcoder_set_timings(crtc_state, pipe); 5234 5235 intel_fdi_normal_train(crtc); 5236 5237 /* For PCH DP, enable TRANS_DP_CTL */ 5238 if (HAS_PCH_CPT(dev_priv) && 5239 intel_crtc_has_dp_encoder(crtc_state)) { 5240 const struct drm_display_mode *adjusted_mode = 5241 &crtc_state->base.adjusted_mode; 5242 u32 bpc = (I915_READ(PIPECONF(pipe)) & PIPECONF_BPC_MASK) >> 5; 5243 i915_reg_t reg = TRANS_DP_CTL(pipe); 5244 enum port port; 5245 5246 temp = I915_READ(reg); 5247 temp &= ~(TRANS_DP_PORT_SEL_MASK | 5248 TRANS_DP_SYNC_MASK | 5249 TRANS_DP_BPC_MASK); 5250 temp |= TRANS_DP_OUTPUT_ENABLE; 5251 temp |= bpc << 9; /* same format but at 11:9 */ 5252 5253 if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) 5254 temp |= TRANS_DP_HSYNC_ACTIVE_HIGH; 5255 if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) 5256 temp |= TRANS_DP_VSYNC_ACTIVE_HIGH; 5257 5258 port = intel_get_crtc_new_encoder(state, crtc_state)->port; 5259 WARN_ON(port < PORT_B || port > PORT_D); 5260 temp |= TRANS_DP_PORT_SEL(port); 5261 5262 I915_WRITE(reg, temp); 5263 } 5264 5265 ironlake_enable_pch_transcoder(crtc_state); 5266 } 5267 5268 static void lpt_pch_enable(const struct intel_atomic_state *state, 5269 const struct intel_crtc_state *crtc_state) 5270 { 5271 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5272 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5273 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 5274 5275 assert_pch_transcoder_disabled(dev_priv, PIPE_A); 5276 5277 lpt_program_iclkip(crtc_state); 5278 5279 /* Set transcoder timing. */ 5280 ironlake_pch_transcoder_set_timings(crtc_state, PIPE_A); 5281 5282 lpt_enable_pch_transcoder(dev_priv, cpu_transcoder); 5283 } 5284 5285 static void cpt_verify_modeset(struct drm_device *dev, int pipe) 5286 { 5287 struct drm_i915_private *dev_priv = to_i915(dev); 5288 i915_reg_t dslreg = PIPEDSL(pipe); 5289 u32 temp; 5290 5291 temp = I915_READ(dslreg); 5292 udelay(500); 5293 if (wait_for(I915_READ(dslreg) != temp, 5)) { 5294 if (wait_for(I915_READ(dslreg) != temp, 5)) 5295 DRM_ERROR("mode set failed: pipe %c stuck\n", pipe_name(pipe)); 5296 } 5297 } 5298 5299 /* 5300 * The hardware phase 0.0 refers to the center of the pixel. 5301 * We want to start from the top/left edge which is phase 5302 * -0.5. That matches how the hardware calculates the scaling 5303 * factors (from top-left of the first pixel to bottom-right 5304 * of the last pixel, as opposed to the pixel centers). 5305 * 5306 * For 4:2:0 subsampled chroma planes we obviously have to 5307 * adjust that so that the chroma sample position lands in 5308 * the right spot. 5309 * 5310 * Note that for packed YCbCr 4:2:2 formats there is no way to 5311 * control chroma siting. The hardware simply replicates the 5312 * chroma samples for both of the luma samples, and thus we don't 5313 * actually get the expected MPEG2 chroma siting convention :( 5314 * The same behaviour is observed on pre-SKL platforms as well. 5315 * 5316 * Theory behind the formula (note that we ignore sub-pixel 5317 * source coordinates): 5318 * s = source sample position 5319 * d = destination sample position 5320 * 5321 * Downscaling 4:1: 5322 * -0.5 5323 * | 0.0 5324 * | | 1.5 (initial phase) 5325 * | | | 5326 * v v v 5327 * | s | s | s | s | 5328 * | d | 5329 * 5330 * Upscaling 1:4: 5331 * -0.5 5332 * | -0.375 (initial phase) 5333 * | | 0.0 5334 * | | | 5335 * v v v 5336 * | s | 5337 * | d | d | d | d | 5338 */ 5339 u16 skl_scaler_calc_phase(int sub, int scale, bool chroma_cosited) 5340 { 5341 int phase = -0x8000; 5342 u16 trip = 0; 5343 5344 if (chroma_cosited) 5345 phase += (sub - 1) * 0x8000 / sub; 5346 5347 phase += scale / (2 * sub); 5348 5349 /* 5350 * Hardware initial phase limited to [-0.5:1.5]. 5351 * Since the max hardware scale factor is 3.0, we 5352 * should never actually excdeed 1.0 here. 5353 */ 5354 WARN_ON(phase < -0x8000 || phase > 0x18000); 5355 5356 if (phase < 0) 5357 phase = 0x10000 + phase; 5358 else 5359 trip = PS_PHASE_TRIP; 5360 5361 return ((phase >> 2) & PS_PHASE_MASK) | trip; 5362 } 5363 5364 #define SKL_MIN_SRC_W 8 5365 #define SKL_MAX_SRC_W 4096 5366 #define SKL_MIN_SRC_H 8 5367 #define SKL_MAX_SRC_H 4096 5368 #define SKL_MIN_DST_W 8 5369 #define SKL_MAX_DST_W 4096 5370 #define SKL_MIN_DST_H 8 5371 #define SKL_MAX_DST_H 4096 5372 #define ICL_MAX_SRC_W 5120 5373 #define ICL_MAX_SRC_H 4096 5374 #define ICL_MAX_DST_W 5120 5375 #define ICL_MAX_DST_H 4096 5376 #define SKL_MIN_YUV_420_SRC_W 16 5377 #define SKL_MIN_YUV_420_SRC_H 16 5378 5379 static int 5380 skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach, 5381 unsigned int scaler_user, int *scaler_id, 5382 int src_w, int src_h, int dst_w, int dst_h, 5383 const struct drm_format_info *format, bool need_scaler) 5384 { 5385 struct intel_crtc_scaler_state *scaler_state = 5386 &crtc_state->scaler_state; 5387 struct intel_crtc *intel_crtc = 5388 to_intel_crtc(crtc_state->base.crtc); 5389 struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev); 5390 const struct drm_display_mode *adjusted_mode = 5391 &crtc_state->base.adjusted_mode; 5392 5393 /* 5394 * Src coordinates are already rotated by 270 degrees for 5395 * the 90/270 degree plane rotation cases (to match the 5396 * GTT mapping), hence no need to account for rotation here. 5397 */ 5398 if (src_w != dst_w || src_h != dst_h) 5399 need_scaler = true; 5400 5401 /* 5402 * Scaling/fitting not supported in IF-ID mode in GEN9+ 5403 * TODO: Interlace fetch mode doesn't support YUV420 planar formats. 5404 * Once NV12 is enabled, handle it here while allocating scaler 5405 * for NV12. 5406 */ 5407 if (INTEL_GEN(dev_priv) >= 9 && crtc_state->base.enable && 5408 need_scaler && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { 5409 DRM_DEBUG_KMS("Pipe/Plane scaling not supported with IF-ID mode\n"); 5410 return -EINVAL; 5411 } 5412 5413 /* 5414 * if plane is being disabled or scaler is no more required or force detach 5415 * - free scaler binded to this plane/crtc 5416 * - in order to do this, update crtc->scaler_usage 5417 * 5418 * Here scaler state in crtc_state is set free so that 5419 * scaler can be assigned to other user. Actual register 5420 * update to free the scaler is done in plane/panel-fit programming. 5421 * For this purpose crtc/plane_state->scaler_id isn't reset here. 5422 */ 5423 if (force_detach || !need_scaler) { 5424 if (*scaler_id >= 0) { 5425 scaler_state->scaler_users &= ~(1 << scaler_user); 5426 scaler_state->scalers[*scaler_id].in_use = 0; 5427 5428 DRM_DEBUG_KMS("scaler_user index %u.%u: " 5429 "Staged freeing scaler id %d scaler_users = 0x%x\n", 5430 intel_crtc->pipe, scaler_user, *scaler_id, 5431 scaler_state->scaler_users); 5432 *scaler_id = -1; 5433 } 5434 return 0; 5435 } 5436 5437 if (format && is_planar_yuv_format(format->format) && 5438 (src_h < SKL_MIN_YUV_420_SRC_H || src_w < SKL_MIN_YUV_420_SRC_W)) { 5439 DRM_DEBUG_KMS("Planar YUV: src dimensions not met\n"); 5440 return -EINVAL; 5441 } 5442 5443 /* range checks */ 5444 if (src_w < SKL_MIN_SRC_W || src_h < SKL_MIN_SRC_H || 5445 dst_w < SKL_MIN_DST_W || dst_h < SKL_MIN_DST_H || 5446 (INTEL_GEN(dev_priv) >= 11 && 5447 (src_w > ICL_MAX_SRC_W || src_h > ICL_MAX_SRC_H || 5448 dst_w > ICL_MAX_DST_W || dst_h > ICL_MAX_DST_H)) || 5449 (INTEL_GEN(dev_priv) < 11 && 5450 (src_w > SKL_MAX_SRC_W || src_h > SKL_MAX_SRC_H || 5451 dst_w > SKL_MAX_DST_W || dst_h > SKL_MAX_DST_H))) { 5452 DRM_DEBUG_KMS("scaler_user index %u.%u: src %ux%u dst %ux%u " 5453 "size is out of scaler range\n", 5454 intel_crtc->pipe, scaler_user, src_w, src_h, dst_w, dst_h); 5455 return -EINVAL; 5456 } 5457 5458 /* mark this plane as a scaler user in crtc_state */ 5459 scaler_state->scaler_users |= (1 << scaler_user); 5460 DRM_DEBUG_KMS("scaler_user index %u.%u: " 5461 "staged scaling request for %ux%u->%ux%u scaler_users = 0x%x\n", 5462 intel_crtc->pipe, scaler_user, src_w, src_h, dst_w, dst_h, 5463 scaler_state->scaler_users); 5464 5465 return 0; 5466 } 5467 5468 /** 5469 * skl_update_scaler_crtc - Stages update to scaler state for a given crtc. 5470 * 5471 * @state: crtc's scaler state 5472 * 5473 * Return 5474 * 0 - scaler_usage updated successfully 5475 * error - requested scaling cannot be supported or other error condition 5476 */ 5477 int skl_update_scaler_crtc(struct intel_crtc_state *state) 5478 { 5479 const struct drm_display_mode *adjusted_mode = &state->base.adjusted_mode; 5480 bool need_scaler = false; 5481 5482 if (state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) 5483 need_scaler = true; 5484 5485 return skl_update_scaler(state, !state->base.active, SKL_CRTC_INDEX, 5486 &state->scaler_state.scaler_id, 5487 state->pipe_src_w, state->pipe_src_h, 5488 adjusted_mode->crtc_hdisplay, 5489 adjusted_mode->crtc_vdisplay, NULL, need_scaler); 5490 } 5491 5492 /** 5493 * skl_update_scaler_plane - Stages update to scaler state for a given plane. 5494 * @crtc_state: crtc's scaler state 5495 * @plane_state: atomic plane state to update 5496 * 5497 * Return 5498 * 0 - scaler_usage updated successfully 5499 * error - requested scaling cannot be supported or other error condition 5500 */ 5501 static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state, 5502 struct intel_plane_state *plane_state) 5503 { 5504 struct intel_plane *intel_plane = 5505 to_intel_plane(plane_state->base.plane); 5506 struct drm_i915_private *dev_priv = to_i915(intel_plane->base.dev); 5507 struct drm_framebuffer *fb = plane_state->base.fb; 5508 int ret; 5509 bool force_detach = !fb || !plane_state->base.visible; 5510 bool need_scaler = false; 5511 5512 /* Pre-gen11 and SDR planes always need a scaler for planar formats. */ 5513 if (!icl_is_hdr_plane(dev_priv, intel_plane->id) && 5514 fb && is_planar_yuv_format(fb->format->format)) 5515 need_scaler = true; 5516 5517 ret = skl_update_scaler(crtc_state, force_detach, 5518 drm_plane_index(&intel_plane->base), 5519 &plane_state->scaler_id, 5520 drm_rect_width(&plane_state->base.src) >> 16, 5521 drm_rect_height(&plane_state->base.src) >> 16, 5522 drm_rect_width(&plane_state->base.dst), 5523 drm_rect_height(&plane_state->base.dst), 5524 fb ? fb->format : NULL, need_scaler); 5525 5526 if (ret || plane_state->scaler_id < 0) 5527 return ret; 5528 5529 /* check colorkey */ 5530 if (plane_state->ckey.flags) { 5531 DRM_DEBUG_KMS("[PLANE:%d:%s] scaling with color key not allowed", 5532 intel_plane->base.base.id, 5533 intel_plane->base.name); 5534 return -EINVAL; 5535 } 5536 5537 /* Check src format */ 5538 switch (fb->format->format) { 5539 case DRM_FORMAT_RGB565: 5540 case DRM_FORMAT_XBGR8888: 5541 case DRM_FORMAT_XRGB8888: 5542 case DRM_FORMAT_ABGR8888: 5543 case DRM_FORMAT_ARGB8888: 5544 case DRM_FORMAT_XRGB2101010: 5545 case DRM_FORMAT_XBGR2101010: 5546 case DRM_FORMAT_XBGR16161616F: 5547 case DRM_FORMAT_ABGR16161616F: 5548 case DRM_FORMAT_XRGB16161616F: 5549 case DRM_FORMAT_ARGB16161616F: 5550 case DRM_FORMAT_YUYV: 5551 case DRM_FORMAT_YVYU: 5552 case DRM_FORMAT_UYVY: 5553 case DRM_FORMAT_VYUY: 5554 case DRM_FORMAT_NV12: 5555 case DRM_FORMAT_P010: 5556 case DRM_FORMAT_P012: 5557 case DRM_FORMAT_P016: 5558 case DRM_FORMAT_Y210: 5559 case DRM_FORMAT_Y212: 5560 case DRM_FORMAT_Y216: 5561 case DRM_FORMAT_XVYU2101010: 5562 case DRM_FORMAT_XVYU12_16161616: 5563 case DRM_FORMAT_XVYU16161616: 5564 break; 5565 default: 5566 DRM_DEBUG_KMS("[PLANE:%d:%s] FB:%d unsupported scaling format 0x%x\n", 5567 intel_plane->base.base.id, intel_plane->base.name, 5568 fb->base.id, fb->format->format); 5569 return -EINVAL; 5570 } 5571 5572 return 0; 5573 } 5574 5575 static void skylake_scaler_disable(struct intel_crtc *crtc) 5576 { 5577 int i; 5578 5579 for (i = 0; i < crtc->num_scalers; i++) 5580 skl_detach_scaler(crtc, i); 5581 } 5582 5583 static void skylake_pfit_enable(const struct intel_crtc_state *crtc_state) 5584 { 5585 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5586 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5587 enum pipe pipe = crtc->pipe; 5588 const struct intel_crtc_scaler_state *scaler_state = 5589 &crtc_state->scaler_state; 5590 5591 if (crtc_state->pch_pfit.enabled) { 5592 u16 uv_rgb_hphase, uv_rgb_vphase; 5593 int pfit_w, pfit_h, hscale, vscale; 5594 int id; 5595 5596 if (WARN_ON(crtc_state->scaler_state.scaler_id < 0)) 5597 return; 5598 5599 pfit_w = (crtc_state->pch_pfit.size >> 16) & 0xFFFF; 5600 pfit_h = crtc_state->pch_pfit.size & 0xFFFF; 5601 5602 hscale = (crtc_state->pipe_src_w << 16) / pfit_w; 5603 vscale = (crtc_state->pipe_src_h << 16) / pfit_h; 5604 5605 uv_rgb_hphase = skl_scaler_calc_phase(1, hscale, false); 5606 uv_rgb_vphase = skl_scaler_calc_phase(1, vscale, false); 5607 5608 id = scaler_state->scaler_id; 5609 I915_WRITE(SKL_PS_CTRL(pipe, id), PS_SCALER_EN | 5610 PS_FILTER_MEDIUM | scaler_state->scalers[id].mode); 5611 I915_WRITE_FW(SKL_PS_VPHASE(pipe, id), 5612 PS_Y_PHASE(0) | PS_UV_RGB_PHASE(uv_rgb_vphase)); 5613 I915_WRITE_FW(SKL_PS_HPHASE(pipe, id), 5614 PS_Y_PHASE(0) | PS_UV_RGB_PHASE(uv_rgb_hphase)); 5615 I915_WRITE(SKL_PS_WIN_POS(pipe, id), crtc_state->pch_pfit.pos); 5616 I915_WRITE(SKL_PS_WIN_SZ(pipe, id), crtc_state->pch_pfit.size); 5617 } 5618 } 5619 5620 static void ironlake_pfit_enable(const struct intel_crtc_state *crtc_state) 5621 { 5622 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5623 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5624 int pipe = crtc->pipe; 5625 5626 if (crtc_state->pch_pfit.enabled) { 5627 /* Force use of hard-coded filter coefficients 5628 * as some pre-programmed values are broken, 5629 * e.g. x201. 5630 */ 5631 if (IS_IVYBRIDGE(dev_priv) || IS_HASWELL(dev_priv)) 5632 I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 | 5633 PF_PIPE_SEL_IVB(pipe)); 5634 else 5635 I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3); 5636 I915_WRITE(PF_WIN_POS(pipe), crtc_state->pch_pfit.pos); 5637 I915_WRITE(PF_WIN_SZ(pipe), crtc_state->pch_pfit.size); 5638 } 5639 } 5640 5641 void hsw_enable_ips(const struct intel_crtc_state *crtc_state) 5642 { 5643 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5644 struct drm_device *dev = crtc->base.dev; 5645 struct drm_i915_private *dev_priv = to_i915(dev); 5646 5647 if (!crtc_state->ips_enabled) 5648 return; 5649 5650 /* 5651 * We can only enable IPS after we enable a plane and wait for a vblank 5652 * This function is called from post_plane_update, which is run after 5653 * a vblank wait. 5654 */ 5655 WARN_ON(!(crtc_state->active_planes & ~BIT(PLANE_CURSOR))); 5656 5657 if (IS_BROADWELL(dev_priv)) { 5658 WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 5659 IPS_ENABLE | IPS_PCODE_CONTROL)); 5660 /* Quoting Art Runyan: "its not safe to expect any particular 5661 * value in IPS_CTL bit 31 after enabling IPS through the 5662 * mailbox." Moreover, the mailbox may return a bogus state, 5663 * so we need to just enable it and continue on. 5664 */ 5665 } else { 5666 I915_WRITE(IPS_CTL, IPS_ENABLE); 5667 /* The bit only becomes 1 in the next vblank, so this wait here 5668 * is essentially intel_wait_for_vblank. If we don't have this 5669 * and don't wait for vblanks until the end of crtc_enable, then 5670 * the HW state readout code will complain that the expected 5671 * IPS_CTL value is not the one we read. */ 5672 if (intel_wait_for_register(&dev_priv->uncore, 5673 IPS_CTL, IPS_ENABLE, IPS_ENABLE, 5674 50)) 5675 DRM_ERROR("Timed out waiting for IPS enable\n"); 5676 } 5677 } 5678 5679 void hsw_disable_ips(const struct intel_crtc_state *crtc_state) 5680 { 5681 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 5682 struct drm_device *dev = crtc->base.dev; 5683 struct drm_i915_private *dev_priv = to_i915(dev); 5684 5685 if (!crtc_state->ips_enabled) 5686 return; 5687 5688 if (IS_BROADWELL(dev_priv)) { 5689 WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0)); 5690 /* 5691 * Wait for PCODE to finish disabling IPS. The BSpec specified 5692 * 42ms timeout value leads to occasional timeouts so use 100ms 5693 * instead. 5694 */ 5695 if (intel_wait_for_register(&dev_priv->uncore, 5696 IPS_CTL, IPS_ENABLE, 0, 5697 100)) 5698 DRM_ERROR("Timed out waiting for IPS disable\n"); 5699 } else { 5700 I915_WRITE(IPS_CTL, 0); 5701 POSTING_READ(IPS_CTL); 5702 } 5703 5704 /* We need to wait for a vblank before we can disable the plane. */ 5705 intel_wait_for_vblank(dev_priv, crtc->pipe); 5706 } 5707 5708 static void intel_crtc_dpms_overlay_disable(struct intel_crtc *intel_crtc) 5709 { 5710 if (intel_crtc->overlay) { 5711 struct drm_device *dev = intel_crtc->base.dev; 5712 5713 mutex_lock(&dev->struct_mutex); 5714 (void) intel_overlay_switch_off(intel_crtc->overlay); 5715 mutex_unlock(&dev->struct_mutex); 5716 } 5717 5718 /* Let userspace switch the overlay on again. In most cases userspace 5719 * has to recompute where to put it anyway. 5720 */ 5721 } 5722 5723 /** 5724 * intel_post_enable_primary - Perform operations after enabling primary plane 5725 * @crtc: the CRTC whose primary plane was just enabled 5726 * @new_crtc_state: the enabling state 5727 * 5728 * Performs potentially sleeping operations that must be done after the primary 5729 * plane is enabled, such as updating FBC and IPS. Note that this may be 5730 * called due to an explicit primary plane update, or due to an implicit 5731 * re-enable that is caused when a sprite plane is updated to no longer 5732 * completely hide the primary plane. 5733 */ 5734 static void 5735 intel_post_enable_primary(struct drm_crtc *crtc, 5736 const struct intel_crtc_state *new_crtc_state) 5737 { 5738 struct drm_device *dev = crtc->dev; 5739 struct drm_i915_private *dev_priv = to_i915(dev); 5740 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5741 int pipe = intel_crtc->pipe; 5742 5743 /* 5744 * Gen2 reports pipe underruns whenever all planes are disabled. 5745 * So don't enable underrun reporting before at least some planes 5746 * are enabled. 5747 * FIXME: Need to fix the logic to work when we turn off all planes 5748 * but leave the pipe running. 5749 */ 5750 if (IS_GEN(dev_priv, 2)) 5751 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 5752 5753 /* Underruns don't always raise interrupts, so check manually. */ 5754 intel_check_cpu_fifo_underruns(dev_priv); 5755 intel_check_pch_fifo_underruns(dev_priv); 5756 } 5757 5758 /* FIXME get rid of this and use pre_plane_update */ 5759 static void 5760 intel_pre_disable_primary_noatomic(struct drm_crtc *crtc) 5761 { 5762 struct drm_device *dev = crtc->dev; 5763 struct drm_i915_private *dev_priv = to_i915(dev); 5764 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5765 int pipe = intel_crtc->pipe; 5766 5767 /* 5768 * Gen2 reports pipe underruns whenever all planes are disabled. 5769 * So disable underrun reporting before all the planes get disabled. 5770 */ 5771 if (IS_GEN(dev_priv, 2)) 5772 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false); 5773 5774 hsw_disable_ips(to_intel_crtc_state(crtc->state)); 5775 5776 /* 5777 * Vblank time updates from the shadow to live plane control register 5778 * are blocked if the memory self-refresh mode is active at that 5779 * moment. So to make sure the plane gets truly disabled, disable 5780 * first the self-refresh mode. The self-refresh enable bit in turn 5781 * will be checked/applied by the HW only at the next frame start 5782 * event which is after the vblank start event, so we need to have a 5783 * wait-for-vblank between disabling the plane and the pipe. 5784 */ 5785 if (HAS_GMCH(dev_priv) && 5786 intel_set_memory_cxsr(dev_priv, false)) 5787 intel_wait_for_vblank(dev_priv, pipe); 5788 } 5789 5790 static bool hsw_pre_update_disable_ips(const struct intel_crtc_state *old_crtc_state, 5791 const struct intel_crtc_state *new_crtc_state) 5792 { 5793 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->base.crtc); 5794 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5795 5796 if (!old_crtc_state->ips_enabled) 5797 return false; 5798 5799 if (needs_modeset(&new_crtc_state->base)) 5800 return true; 5801 5802 /* 5803 * Workaround : Do not read or write the pipe palette/gamma data while 5804 * GAMMA_MODE is configured for split gamma and IPS_CTL has IPS enabled. 5805 * 5806 * Disable IPS before we program the LUT. 5807 */ 5808 if (IS_HASWELL(dev_priv) && 5809 (new_crtc_state->base.color_mgmt_changed || 5810 new_crtc_state->update_pipe) && 5811 new_crtc_state->gamma_mode == GAMMA_MODE_MODE_SPLIT) 5812 return true; 5813 5814 return !new_crtc_state->ips_enabled; 5815 } 5816 5817 static bool hsw_post_update_enable_ips(const struct intel_crtc_state *old_crtc_state, 5818 const struct intel_crtc_state *new_crtc_state) 5819 { 5820 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->base.crtc); 5821 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 5822 5823 if (!new_crtc_state->ips_enabled) 5824 return false; 5825 5826 if (needs_modeset(&new_crtc_state->base)) 5827 return true; 5828 5829 /* 5830 * Workaround : Do not read or write the pipe palette/gamma data while 5831 * GAMMA_MODE is configured for split gamma and IPS_CTL has IPS enabled. 5832 * 5833 * Re-enable IPS after the LUT has been programmed. 5834 */ 5835 if (IS_HASWELL(dev_priv) && 5836 (new_crtc_state->base.color_mgmt_changed || 5837 new_crtc_state->update_pipe) && 5838 new_crtc_state->gamma_mode == GAMMA_MODE_MODE_SPLIT) 5839 return true; 5840 5841 /* 5842 * We can't read out IPS on broadwell, assume the worst and 5843 * forcibly enable IPS on the first fastset. 5844 */ 5845 if (new_crtc_state->update_pipe && 5846 old_crtc_state->base.adjusted_mode.private_flags & I915_MODE_FLAG_INHERITED) 5847 return true; 5848 5849 return !old_crtc_state->ips_enabled; 5850 } 5851 5852 static bool needs_nv12_wa(struct drm_i915_private *dev_priv, 5853 const struct intel_crtc_state *crtc_state) 5854 { 5855 if (!crtc_state->nv12_planes) 5856 return false; 5857 5858 /* WA Display #0827: Gen9:all */ 5859 if (IS_GEN(dev_priv, 9) && !IS_GEMINILAKE(dev_priv)) 5860 return true; 5861 5862 return false; 5863 } 5864 5865 static bool needs_scalerclk_wa(struct drm_i915_private *dev_priv, 5866 const struct intel_crtc_state *crtc_state) 5867 { 5868 /* Wa_2006604312:icl */ 5869 if (crtc_state->scaler_state.scaler_users > 0 && IS_ICELAKE(dev_priv)) 5870 return true; 5871 5872 return false; 5873 } 5874 5875 static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state) 5876 { 5877 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 5878 struct drm_device *dev = crtc->base.dev; 5879 struct drm_i915_private *dev_priv = to_i915(dev); 5880 struct drm_atomic_state *old_state = old_crtc_state->base.state; 5881 struct intel_crtc_state *pipe_config = 5882 intel_atomic_get_new_crtc_state(to_intel_atomic_state(old_state), 5883 crtc); 5884 struct drm_plane *primary = crtc->base.primary; 5885 struct drm_plane_state *old_primary_state = 5886 drm_atomic_get_old_plane_state(old_state, primary); 5887 5888 intel_frontbuffer_flip(to_i915(crtc->base.dev), pipe_config->fb_bits); 5889 5890 if (pipe_config->update_wm_post && pipe_config->base.active) 5891 intel_update_watermarks(crtc); 5892 5893 if (hsw_post_update_enable_ips(old_crtc_state, pipe_config)) 5894 hsw_enable_ips(pipe_config); 5895 5896 if (old_primary_state) { 5897 struct drm_plane_state *new_primary_state = 5898 drm_atomic_get_new_plane_state(old_state, primary); 5899 5900 intel_fbc_post_update(crtc); 5901 5902 if (new_primary_state->visible && 5903 (needs_modeset(&pipe_config->base) || 5904 !old_primary_state->visible)) 5905 intel_post_enable_primary(&crtc->base, pipe_config); 5906 } 5907 5908 if (needs_nv12_wa(dev_priv, old_crtc_state) && 5909 !needs_nv12_wa(dev_priv, pipe_config)) 5910 skl_wa_827(dev_priv, crtc->pipe, false); 5911 5912 if (needs_scalerclk_wa(dev_priv, old_crtc_state) && 5913 !needs_scalerclk_wa(dev_priv, pipe_config)) 5914 icl_wa_scalerclkgating(dev_priv, crtc->pipe, false); 5915 } 5916 5917 static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state, 5918 struct intel_crtc_state *pipe_config) 5919 { 5920 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 5921 struct drm_device *dev = crtc->base.dev; 5922 struct drm_i915_private *dev_priv = to_i915(dev); 5923 struct drm_atomic_state *old_state = old_crtc_state->base.state; 5924 struct drm_plane *primary = crtc->base.primary; 5925 struct drm_plane_state *old_primary_state = 5926 drm_atomic_get_old_plane_state(old_state, primary); 5927 bool modeset = needs_modeset(&pipe_config->base); 5928 struct intel_atomic_state *old_intel_state = 5929 to_intel_atomic_state(old_state); 5930 5931 if (hsw_pre_update_disable_ips(old_crtc_state, pipe_config)) 5932 hsw_disable_ips(old_crtc_state); 5933 5934 if (old_primary_state) { 5935 struct intel_plane_state *new_primary_state = 5936 intel_atomic_get_new_plane_state(old_intel_state, 5937 to_intel_plane(primary)); 5938 5939 intel_fbc_pre_update(crtc, pipe_config, new_primary_state); 5940 /* 5941 * Gen2 reports pipe underruns whenever all planes are disabled. 5942 * So disable underrun reporting before all the planes get disabled. 5943 */ 5944 if (IS_GEN(dev_priv, 2) && old_primary_state->visible && 5945 (modeset || !new_primary_state->base.visible)) 5946 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false); 5947 } 5948 5949 /* Display WA 827 */ 5950 if (!needs_nv12_wa(dev_priv, old_crtc_state) && 5951 needs_nv12_wa(dev_priv, pipe_config)) 5952 skl_wa_827(dev_priv, crtc->pipe, true); 5953 5954 /* Wa_2006604312:icl */ 5955 if (!needs_scalerclk_wa(dev_priv, old_crtc_state) && 5956 needs_scalerclk_wa(dev_priv, pipe_config)) 5957 icl_wa_scalerclkgating(dev_priv, crtc->pipe, true); 5958 5959 /* 5960 * Vblank time updates from the shadow to live plane control register 5961 * are blocked if the memory self-refresh mode is active at that 5962 * moment. So to make sure the plane gets truly disabled, disable 5963 * first the self-refresh mode. The self-refresh enable bit in turn 5964 * will be checked/applied by the HW only at the next frame start 5965 * event which is after the vblank start event, so we need to have a 5966 * wait-for-vblank between disabling the plane and the pipe. 5967 */ 5968 if (HAS_GMCH(dev_priv) && old_crtc_state->base.active && 5969 pipe_config->disable_cxsr && intel_set_memory_cxsr(dev_priv, false)) 5970 intel_wait_for_vblank(dev_priv, crtc->pipe); 5971 5972 /* 5973 * IVB workaround: must disable low power watermarks for at least 5974 * one frame before enabling scaling. LP watermarks can be re-enabled 5975 * when scaling is disabled. 5976 * 5977 * WaCxSRDisabledForSpriteScaling:ivb 5978 */ 5979 if (pipe_config->disable_lp_wm && ilk_disable_lp_wm(dev) && 5980 old_crtc_state->base.active) 5981 intel_wait_for_vblank(dev_priv, crtc->pipe); 5982 5983 /* 5984 * If we're doing a modeset, we're done. No need to do any pre-vblank 5985 * watermark programming here. 5986 */ 5987 if (needs_modeset(&pipe_config->base)) 5988 return; 5989 5990 /* 5991 * For platforms that support atomic watermarks, program the 5992 * 'intermediate' watermarks immediately. On pre-gen9 platforms, these 5993 * will be the intermediate values that are safe for both pre- and 5994 * post- vblank; when vblank happens, the 'active' values will be set 5995 * to the final 'target' values and we'll do this again to get the 5996 * optimal watermarks. For gen9+ platforms, the values we program here 5997 * will be the final target values which will get automatically latched 5998 * at vblank time; no further programming will be necessary. 5999 * 6000 * If a platform hasn't been transitioned to atomic watermarks yet, 6001 * we'll continue to update watermarks the old way, if flags tell 6002 * us to. 6003 */ 6004 if (dev_priv->display.initial_watermarks != NULL) 6005 dev_priv->display.initial_watermarks(old_intel_state, 6006 pipe_config); 6007 else if (pipe_config->update_wm_pre) 6008 intel_update_watermarks(crtc); 6009 } 6010 6011 static void intel_crtc_disable_planes(struct intel_atomic_state *state, 6012 struct intel_crtc *crtc) 6013 { 6014 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6015 const struct intel_crtc_state *new_crtc_state = 6016 intel_atomic_get_new_crtc_state(state, crtc); 6017 unsigned int update_mask = new_crtc_state->update_planes; 6018 const struct intel_plane_state *old_plane_state; 6019 struct intel_plane *plane; 6020 unsigned fb_bits = 0; 6021 int i; 6022 6023 intel_crtc_dpms_overlay_disable(crtc); 6024 6025 for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) { 6026 if (crtc->pipe != plane->pipe || 6027 !(update_mask & BIT(plane->id))) 6028 continue; 6029 6030 intel_disable_plane(plane, new_crtc_state); 6031 6032 if (old_plane_state->base.visible) 6033 fb_bits |= plane->frontbuffer_bit; 6034 } 6035 6036 intel_frontbuffer_flip(dev_priv, fb_bits); 6037 } 6038 6039 static void intel_encoders_pre_pll_enable(struct drm_crtc *crtc, 6040 struct intel_crtc_state *crtc_state, 6041 struct drm_atomic_state *old_state) 6042 { 6043 struct drm_connector_state *conn_state; 6044 struct drm_connector *conn; 6045 int i; 6046 6047 for_each_new_connector_in_state(old_state, conn, conn_state, i) { 6048 struct intel_encoder *encoder = 6049 to_intel_encoder(conn_state->best_encoder); 6050 6051 if (conn_state->crtc != crtc) 6052 continue; 6053 6054 if (encoder->pre_pll_enable) 6055 encoder->pre_pll_enable(encoder, crtc_state, conn_state); 6056 } 6057 } 6058 6059 static void intel_encoders_pre_enable(struct drm_crtc *crtc, 6060 struct intel_crtc_state *crtc_state, 6061 struct drm_atomic_state *old_state) 6062 { 6063 struct drm_connector_state *conn_state; 6064 struct drm_connector *conn; 6065 int i; 6066 6067 for_each_new_connector_in_state(old_state, conn, conn_state, i) { 6068 struct intel_encoder *encoder = 6069 to_intel_encoder(conn_state->best_encoder); 6070 6071 if (conn_state->crtc != crtc) 6072 continue; 6073 6074 if (encoder->pre_enable) 6075 encoder->pre_enable(encoder, crtc_state, conn_state); 6076 } 6077 } 6078 6079 static void intel_encoders_enable(struct drm_crtc *crtc, 6080 struct intel_crtc_state *crtc_state, 6081 struct drm_atomic_state *old_state) 6082 { 6083 struct drm_connector_state *conn_state; 6084 struct drm_connector *conn; 6085 int i; 6086 6087 for_each_new_connector_in_state(old_state, conn, conn_state, i) { 6088 struct intel_encoder *encoder = 6089 to_intel_encoder(conn_state->best_encoder); 6090 6091 if (conn_state->crtc != crtc) 6092 continue; 6093 6094 if (encoder->enable) 6095 encoder->enable(encoder, crtc_state, conn_state); 6096 intel_opregion_notify_encoder(encoder, true); 6097 } 6098 } 6099 6100 static void intel_encoders_disable(struct drm_crtc *crtc, 6101 struct intel_crtc_state *old_crtc_state, 6102 struct drm_atomic_state *old_state) 6103 { 6104 struct drm_connector_state *old_conn_state; 6105 struct drm_connector *conn; 6106 int i; 6107 6108 for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { 6109 struct intel_encoder *encoder = 6110 to_intel_encoder(old_conn_state->best_encoder); 6111 6112 if (old_conn_state->crtc != crtc) 6113 continue; 6114 6115 intel_opregion_notify_encoder(encoder, false); 6116 if (encoder->disable) 6117 encoder->disable(encoder, old_crtc_state, old_conn_state); 6118 } 6119 } 6120 6121 static void intel_encoders_post_disable(struct drm_crtc *crtc, 6122 struct intel_crtc_state *old_crtc_state, 6123 struct drm_atomic_state *old_state) 6124 { 6125 struct drm_connector_state *old_conn_state; 6126 struct drm_connector *conn; 6127 int i; 6128 6129 for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { 6130 struct intel_encoder *encoder = 6131 to_intel_encoder(old_conn_state->best_encoder); 6132 6133 if (old_conn_state->crtc != crtc) 6134 continue; 6135 6136 if (encoder->post_disable) 6137 encoder->post_disable(encoder, old_crtc_state, old_conn_state); 6138 } 6139 } 6140 6141 static void intel_encoders_post_pll_disable(struct drm_crtc *crtc, 6142 struct intel_crtc_state *old_crtc_state, 6143 struct drm_atomic_state *old_state) 6144 { 6145 struct drm_connector_state *old_conn_state; 6146 struct drm_connector *conn; 6147 int i; 6148 6149 for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { 6150 struct intel_encoder *encoder = 6151 to_intel_encoder(old_conn_state->best_encoder); 6152 6153 if (old_conn_state->crtc != crtc) 6154 continue; 6155 6156 if (encoder->post_pll_disable) 6157 encoder->post_pll_disable(encoder, old_crtc_state, old_conn_state); 6158 } 6159 } 6160 6161 static void intel_encoders_update_pipe(struct drm_crtc *crtc, 6162 struct intel_crtc_state *crtc_state, 6163 struct drm_atomic_state *old_state) 6164 { 6165 struct drm_connector_state *conn_state; 6166 struct drm_connector *conn; 6167 int i; 6168 6169 for_each_new_connector_in_state(old_state, conn, conn_state, i) { 6170 struct intel_encoder *encoder = 6171 to_intel_encoder(conn_state->best_encoder); 6172 6173 if (conn_state->crtc != crtc) 6174 continue; 6175 6176 if (encoder->update_pipe) 6177 encoder->update_pipe(encoder, crtc_state, conn_state); 6178 } 6179 } 6180 6181 static void intel_disable_primary_plane(const struct intel_crtc_state *crtc_state) 6182 { 6183 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 6184 struct intel_plane *plane = to_intel_plane(crtc->base.primary); 6185 6186 plane->disable_plane(plane, crtc_state); 6187 } 6188 6189 static void ironlake_crtc_enable(struct intel_crtc_state *pipe_config, 6190 struct drm_atomic_state *old_state) 6191 { 6192 struct drm_crtc *crtc = pipe_config->base.crtc; 6193 struct drm_device *dev = crtc->dev; 6194 struct drm_i915_private *dev_priv = to_i915(dev); 6195 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6196 int pipe = intel_crtc->pipe; 6197 struct intel_atomic_state *old_intel_state = 6198 to_intel_atomic_state(old_state); 6199 6200 if (WARN_ON(intel_crtc->active)) 6201 return; 6202 6203 /* 6204 * Sometimes spurious CPU pipe underruns happen during FDI 6205 * training, at least with VGA+HDMI cloning. Suppress them. 6206 * 6207 * On ILK we get an occasional spurious CPU pipe underruns 6208 * between eDP port A enable and vdd enable. Also PCH port 6209 * enable seems to result in the occasional CPU pipe underrun. 6210 * 6211 * Spurious PCH underruns also occur during PCH enabling. 6212 */ 6213 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false); 6214 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, false); 6215 6216 if (pipe_config->has_pch_encoder) 6217 intel_prepare_shared_dpll(pipe_config); 6218 6219 if (intel_crtc_has_dp_encoder(pipe_config)) 6220 intel_dp_set_m_n(pipe_config, M1_N1); 6221 6222 intel_set_pipe_timings(pipe_config); 6223 intel_set_pipe_src_size(pipe_config); 6224 6225 if (pipe_config->has_pch_encoder) { 6226 intel_cpu_transcoder_set_m_n(pipe_config, 6227 &pipe_config->fdi_m_n, NULL); 6228 } 6229 6230 ironlake_set_pipeconf(pipe_config); 6231 6232 intel_crtc->active = true; 6233 6234 intel_encoders_pre_enable(crtc, pipe_config, old_state); 6235 6236 if (pipe_config->has_pch_encoder) { 6237 /* Note: FDI PLL enabling _must_ be done before we enable the 6238 * cpu pipes, hence this is separate from all the other fdi/pch 6239 * enabling. */ 6240 ironlake_fdi_pll_enable(pipe_config); 6241 } else { 6242 assert_fdi_tx_disabled(dev_priv, pipe); 6243 assert_fdi_rx_disabled(dev_priv, pipe); 6244 } 6245 6246 ironlake_pfit_enable(pipe_config); 6247 6248 /* 6249 * On ILK+ LUT must be loaded before the pipe is running but with 6250 * clocks enabled 6251 */ 6252 intel_color_load_luts(pipe_config); 6253 intel_color_commit(pipe_config); 6254 /* update DSPCNTR to configure gamma for pipe bottom color */ 6255 intel_disable_primary_plane(pipe_config); 6256 6257 if (dev_priv->display.initial_watermarks != NULL) 6258 dev_priv->display.initial_watermarks(old_intel_state, pipe_config); 6259 intel_enable_pipe(pipe_config); 6260 6261 if (pipe_config->has_pch_encoder) 6262 ironlake_pch_enable(old_intel_state, pipe_config); 6263 6264 assert_vblank_disabled(crtc); 6265 intel_crtc_vblank_on(pipe_config); 6266 6267 intel_encoders_enable(crtc, pipe_config, old_state); 6268 6269 if (HAS_PCH_CPT(dev_priv)) 6270 cpt_verify_modeset(dev, intel_crtc->pipe); 6271 6272 /* 6273 * Must wait for vblank to avoid spurious PCH FIFO underruns. 6274 * And a second vblank wait is needed at least on ILK with 6275 * some interlaced HDMI modes. Let's do the double wait always 6276 * in case there are more corner cases we don't know about. 6277 */ 6278 if (pipe_config->has_pch_encoder) { 6279 intel_wait_for_vblank(dev_priv, pipe); 6280 intel_wait_for_vblank(dev_priv, pipe); 6281 } 6282 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 6283 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true); 6284 } 6285 6286 /* IPS only exists on ULT machines and is tied to pipe A. */ 6287 static bool hsw_crtc_supports_ips(struct intel_crtc *crtc) 6288 { 6289 return HAS_IPS(to_i915(crtc->base.dev)) && crtc->pipe == PIPE_A; 6290 } 6291 6292 static void glk_pipe_scaler_clock_gating_wa(struct drm_i915_private *dev_priv, 6293 enum pipe pipe, bool apply) 6294 { 6295 u32 val = I915_READ(CLKGATE_DIS_PSL(pipe)); 6296 u32 mask = DPF_GATING_DIS | DPF_RAM_GATING_DIS | DPFR_GATING_DIS; 6297 6298 if (apply) 6299 val |= mask; 6300 else 6301 val &= ~mask; 6302 6303 I915_WRITE(CLKGATE_DIS_PSL(pipe), val); 6304 } 6305 6306 static void icl_pipe_mbus_enable(struct intel_crtc *crtc) 6307 { 6308 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6309 enum pipe pipe = crtc->pipe; 6310 u32 val; 6311 6312 val = MBUS_DBOX_A_CREDIT(2); 6313 val |= MBUS_DBOX_BW_CREDIT(1); 6314 val |= MBUS_DBOX_B_CREDIT(8); 6315 6316 I915_WRITE(PIPE_MBUS_DBOX_CTL(pipe), val); 6317 } 6318 6319 static void haswell_crtc_enable(struct intel_crtc_state *pipe_config, 6320 struct drm_atomic_state *old_state) 6321 { 6322 struct drm_crtc *crtc = pipe_config->base.crtc; 6323 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 6324 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6325 int pipe = intel_crtc->pipe, hsw_workaround_pipe; 6326 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; 6327 struct intel_atomic_state *old_intel_state = 6328 to_intel_atomic_state(old_state); 6329 bool psl_clkgate_wa; 6330 6331 if (WARN_ON(intel_crtc->active)) 6332 return; 6333 6334 intel_encoders_pre_pll_enable(crtc, pipe_config, old_state); 6335 6336 if (pipe_config->shared_dpll) 6337 intel_enable_shared_dpll(pipe_config); 6338 6339 intel_encoders_pre_enable(crtc, pipe_config, old_state); 6340 6341 if (intel_crtc_has_dp_encoder(pipe_config)) 6342 intel_dp_set_m_n(pipe_config, M1_N1); 6343 6344 if (!transcoder_is_dsi(cpu_transcoder)) 6345 intel_set_pipe_timings(pipe_config); 6346 6347 intel_set_pipe_src_size(pipe_config); 6348 6349 if (cpu_transcoder != TRANSCODER_EDP && 6350 !transcoder_is_dsi(cpu_transcoder)) { 6351 I915_WRITE(PIPE_MULT(cpu_transcoder), 6352 pipe_config->pixel_multiplier - 1); 6353 } 6354 6355 if (pipe_config->has_pch_encoder) { 6356 intel_cpu_transcoder_set_m_n(pipe_config, 6357 &pipe_config->fdi_m_n, NULL); 6358 } 6359 6360 if (!transcoder_is_dsi(cpu_transcoder)) 6361 haswell_set_pipeconf(pipe_config); 6362 6363 if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) 6364 bdw_set_pipemisc(pipe_config); 6365 6366 intel_crtc->active = true; 6367 6368 /* Display WA #1180: WaDisableScalarClockGating: glk, cnl */ 6369 psl_clkgate_wa = (IS_GEMINILAKE(dev_priv) || IS_CANNONLAKE(dev_priv)) && 6370 pipe_config->pch_pfit.enabled; 6371 if (psl_clkgate_wa) 6372 glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); 6373 6374 if (INTEL_GEN(dev_priv) >= 9) 6375 skylake_pfit_enable(pipe_config); 6376 else 6377 ironlake_pfit_enable(pipe_config); 6378 6379 /* 6380 * On ILK+ LUT must be loaded before the pipe is running but with 6381 * clocks enabled 6382 */ 6383 intel_color_load_luts(pipe_config); 6384 intel_color_commit(pipe_config); 6385 /* update DSPCNTR to configure gamma/csc for pipe bottom color */ 6386 if (INTEL_GEN(dev_priv) < 9) 6387 intel_disable_primary_plane(pipe_config); 6388 6389 if (INTEL_GEN(dev_priv) >= 11) 6390 icl_set_pipe_chicken(intel_crtc); 6391 6392 intel_ddi_set_pipe_settings(pipe_config); 6393 if (!transcoder_is_dsi(cpu_transcoder)) 6394 intel_ddi_enable_transcoder_func(pipe_config); 6395 6396 if (dev_priv->display.initial_watermarks != NULL) 6397 dev_priv->display.initial_watermarks(old_intel_state, pipe_config); 6398 6399 if (INTEL_GEN(dev_priv) >= 11) 6400 icl_pipe_mbus_enable(intel_crtc); 6401 6402 /* XXX: Do the pipe assertions at the right place for BXT DSI. */ 6403 if (!transcoder_is_dsi(cpu_transcoder)) 6404 intel_enable_pipe(pipe_config); 6405 6406 if (pipe_config->has_pch_encoder) 6407 lpt_pch_enable(old_intel_state, pipe_config); 6408 6409 if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DP_MST)) 6410 intel_ddi_set_vc_payload_alloc(pipe_config, true); 6411 6412 assert_vblank_disabled(crtc); 6413 intel_crtc_vblank_on(pipe_config); 6414 6415 intel_encoders_enable(crtc, pipe_config, old_state); 6416 6417 if (psl_clkgate_wa) { 6418 intel_wait_for_vblank(dev_priv, pipe); 6419 glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); 6420 } 6421 6422 /* If we change the relative order between pipe/planes enabling, we need 6423 * to change the workaround. */ 6424 hsw_workaround_pipe = pipe_config->hsw_workaround_pipe; 6425 if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { 6426 intel_wait_for_vblank(dev_priv, hsw_workaround_pipe); 6427 intel_wait_for_vblank(dev_priv, hsw_workaround_pipe); 6428 } 6429 } 6430 6431 static void ironlake_pfit_disable(const struct intel_crtc_state *old_crtc_state) 6432 { 6433 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 6434 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6435 enum pipe pipe = crtc->pipe; 6436 6437 /* To avoid upsetting the power well on haswell only disable the pfit if 6438 * it's in use. The hw state code will make sure we get this right. */ 6439 if (old_crtc_state->pch_pfit.enabled) { 6440 I915_WRITE(PF_CTL(pipe), 0); 6441 I915_WRITE(PF_WIN_POS(pipe), 0); 6442 I915_WRITE(PF_WIN_SZ(pipe), 0); 6443 } 6444 } 6445 6446 static void ironlake_crtc_disable(struct intel_crtc_state *old_crtc_state, 6447 struct drm_atomic_state *old_state) 6448 { 6449 struct drm_crtc *crtc = old_crtc_state->base.crtc; 6450 struct drm_device *dev = crtc->dev; 6451 struct drm_i915_private *dev_priv = to_i915(dev); 6452 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6453 int pipe = intel_crtc->pipe; 6454 6455 /* 6456 * Sometimes spurious CPU pipe underruns happen when the 6457 * pipe is already disabled, but FDI RX/TX is still enabled. 6458 * Happens at least with VGA+HDMI cloning. Suppress them. 6459 */ 6460 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false); 6461 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, false); 6462 6463 intel_encoders_disable(crtc, old_crtc_state, old_state); 6464 6465 drm_crtc_vblank_off(crtc); 6466 assert_vblank_disabled(crtc); 6467 6468 intel_disable_pipe(old_crtc_state); 6469 6470 ironlake_pfit_disable(old_crtc_state); 6471 6472 if (old_crtc_state->has_pch_encoder) 6473 ironlake_fdi_disable(crtc); 6474 6475 intel_encoders_post_disable(crtc, old_crtc_state, old_state); 6476 6477 if (old_crtc_state->has_pch_encoder) { 6478 ironlake_disable_pch_transcoder(dev_priv, pipe); 6479 6480 if (HAS_PCH_CPT(dev_priv)) { 6481 i915_reg_t reg; 6482 u32 temp; 6483 6484 /* disable TRANS_DP_CTL */ 6485 reg = TRANS_DP_CTL(pipe); 6486 temp = I915_READ(reg); 6487 temp &= ~(TRANS_DP_OUTPUT_ENABLE | 6488 TRANS_DP_PORT_SEL_MASK); 6489 temp |= TRANS_DP_PORT_SEL_NONE; 6490 I915_WRITE(reg, temp); 6491 6492 /* disable DPLL_SEL */ 6493 temp = I915_READ(PCH_DPLL_SEL); 6494 temp &= ~(TRANS_DPLL_ENABLE(pipe) | TRANS_DPLLB_SEL(pipe)); 6495 I915_WRITE(PCH_DPLL_SEL, temp); 6496 } 6497 6498 ironlake_fdi_pll_disable(intel_crtc); 6499 } 6500 6501 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 6502 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true); 6503 } 6504 6505 static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state, 6506 struct drm_atomic_state *old_state) 6507 { 6508 struct drm_crtc *crtc = old_crtc_state->base.crtc; 6509 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 6510 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6511 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; 6512 6513 intel_encoders_disable(crtc, old_crtc_state, old_state); 6514 6515 drm_crtc_vblank_off(crtc); 6516 assert_vblank_disabled(crtc); 6517 6518 /* XXX: Do the pipe assertions at the right place for BXT DSI. */ 6519 if (!transcoder_is_dsi(cpu_transcoder)) 6520 intel_disable_pipe(old_crtc_state); 6521 6522 if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) 6523 intel_ddi_set_vc_payload_alloc(old_crtc_state, false); 6524 6525 if (!transcoder_is_dsi(cpu_transcoder)) 6526 intel_ddi_disable_transcoder_func(old_crtc_state); 6527 6528 intel_dsc_disable(old_crtc_state); 6529 6530 if (INTEL_GEN(dev_priv) >= 9) 6531 skylake_scaler_disable(intel_crtc); 6532 else 6533 ironlake_pfit_disable(old_crtc_state); 6534 6535 intel_encoders_post_disable(crtc, old_crtc_state, old_state); 6536 6537 intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state); 6538 } 6539 6540 static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state) 6541 { 6542 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 6543 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6544 6545 if (!crtc_state->gmch_pfit.control) 6546 return; 6547 6548 /* 6549 * The panel fitter should only be adjusted whilst the pipe is disabled, 6550 * according to register description and PRM. 6551 */ 6552 WARN_ON(I915_READ(PFIT_CONTROL) & PFIT_ENABLE); 6553 assert_pipe_disabled(dev_priv, crtc->pipe); 6554 6555 I915_WRITE(PFIT_PGM_RATIOS, crtc_state->gmch_pfit.pgm_ratios); 6556 I915_WRITE(PFIT_CONTROL, crtc_state->gmch_pfit.control); 6557 6558 /* Border color in case we don't scale up to the full screen. Black by 6559 * default, change to something else for debugging. */ 6560 I915_WRITE(BCLRPAT(crtc->pipe), 0); 6561 } 6562 6563 bool intel_port_is_combophy(struct drm_i915_private *dev_priv, enum port port) 6564 { 6565 if (port == PORT_NONE) 6566 return false; 6567 6568 if (IS_ELKHARTLAKE(dev_priv)) 6569 return port <= PORT_C; 6570 6571 if (INTEL_GEN(dev_priv) >= 11) 6572 return port <= PORT_B; 6573 6574 return false; 6575 } 6576 6577 bool intel_port_is_tc(struct drm_i915_private *dev_priv, enum port port) 6578 { 6579 if (INTEL_GEN(dev_priv) >= 11 && !IS_ELKHARTLAKE(dev_priv)) 6580 return port >= PORT_C && port <= PORT_F; 6581 6582 return false; 6583 } 6584 6585 enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv, enum port port) 6586 { 6587 if (!intel_port_is_tc(dev_priv, port)) 6588 return PORT_TC_NONE; 6589 6590 return port - PORT_C; 6591 } 6592 6593 enum intel_display_power_domain intel_port_to_power_domain(enum port port) 6594 { 6595 switch (port) { 6596 case PORT_A: 6597 return POWER_DOMAIN_PORT_DDI_A_LANES; 6598 case PORT_B: 6599 return POWER_DOMAIN_PORT_DDI_B_LANES; 6600 case PORT_C: 6601 return POWER_DOMAIN_PORT_DDI_C_LANES; 6602 case PORT_D: 6603 return POWER_DOMAIN_PORT_DDI_D_LANES; 6604 case PORT_E: 6605 return POWER_DOMAIN_PORT_DDI_E_LANES; 6606 case PORT_F: 6607 return POWER_DOMAIN_PORT_DDI_F_LANES; 6608 default: 6609 MISSING_CASE(port); 6610 return POWER_DOMAIN_PORT_OTHER; 6611 } 6612 } 6613 6614 enum intel_display_power_domain 6615 intel_aux_power_domain(struct intel_digital_port *dig_port) 6616 { 6617 switch (dig_port->aux_ch) { 6618 case AUX_CH_A: 6619 return POWER_DOMAIN_AUX_A; 6620 case AUX_CH_B: 6621 return POWER_DOMAIN_AUX_B; 6622 case AUX_CH_C: 6623 return POWER_DOMAIN_AUX_C; 6624 case AUX_CH_D: 6625 return POWER_DOMAIN_AUX_D; 6626 case AUX_CH_E: 6627 return POWER_DOMAIN_AUX_E; 6628 case AUX_CH_F: 6629 return POWER_DOMAIN_AUX_F; 6630 default: 6631 MISSING_CASE(dig_port->aux_ch); 6632 return POWER_DOMAIN_AUX_A; 6633 } 6634 } 6635 6636 static u64 get_crtc_power_domains(struct drm_crtc *crtc, 6637 struct intel_crtc_state *crtc_state) 6638 { 6639 struct drm_device *dev = crtc->dev; 6640 struct drm_i915_private *dev_priv = to_i915(dev); 6641 struct drm_encoder *encoder; 6642 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6643 enum pipe pipe = intel_crtc->pipe; 6644 u64 mask; 6645 enum transcoder transcoder = crtc_state->cpu_transcoder; 6646 6647 if (!crtc_state->base.active) 6648 return 0; 6649 6650 mask = BIT_ULL(POWER_DOMAIN_PIPE(pipe)); 6651 mask |= BIT_ULL(POWER_DOMAIN_TRANSCODER(transcoder)); 6652 if (crtc_state->pch_pfit.enabled || 6653 crtc_state->pch_pfit.force_thru) 6654 mask |= BIT_ULL(POWER_DOMAIN_PIPE_PANEL_FITTER(pipe)); 6655 6656 drm_for_each_encoder_mask(encoder, dev, crtc_state->base.encoder_mask) { 6657 struct intel_encoder *intel_encoder = to_intel_encoder(encoder); 6658 6659 mask |= BIT_ULL(intel_encoder->power_domain); 6660 } 6661 6662 if (HAS_DDI(dev_priv) && crtc_state->has_audio) 6663 mask |= BIT_ULL(POWER_DOMAIN_AUDIO); 6664 6665 if (crtc_state->shared_dpll) 6666 mask |= BIT_ULL(POWER_DOMAIN_DISPLAY_CORE); 6667 6668 return mask; 6669 } 6670 6671 static u64 6672 modeset_get_crtc_power_domains(struct drm_crtc *crtc, 6673 struct intel_crtc_state *crtc_state) 6674 { 6675 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 6676 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6677 enum intel_display_power_domain domain; 6678 u64 domains, new_domains, old_domains; 6679 6680 old_domains = intel_crtc->enabled_power_domains; 6681 intel_crtc->enabled_power_domains = new_domains = 6682 get_crtc_power_domains(crtc, crtc_state); 6683 6684 domains = new_domains & ~old_domains; 6685 6686 for_each_power_domain(domain, domains) 6687 intel_display_power_get(dev_priv, domain); 6688 6689 return old_domains & ~new_domains; 6690 } 6691 6692 static void modeset_put_power_domains(struct drm_i915_private *dev_priv, 6693 u64 domains) 6694 { 6695 enum intel_display_power_domain domain; 6696 6697 for_each_power_domain(domain, domains) 6698 intel_display_power_put_unchecked(dev_priv, domain); 6699 } 6700 6701 static void valleyview_crtc_enable(struct intel_crtc_state *pipe_config, 6702 struct drm_atomic_state *old_state) 6703 { 6704 struct intel_atomic_state *old_intel_state = 6705 to_intel_atomic_state(old_state); 6706 struct drm_crtc *crtc = pipe_config->base.crtc; 6707 struct drm_device *dev = crtc->dev; 6708 struct drm_i915_private *dev_priv = to_i915(dev); 6709 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6710 int pipe = intel_crtc->pipe; 6711 6712 if (WARN_ON(intel_crtc->active)) 6713 return; 6714 6715 if (intel_crtc_has_dp_encoder(pipe_config)) 6716 intel_dp_set_m_n(pipe_config, M1_N1); 6717 6718 intel_set_pipe_timings(pipe_config); 6719 intel_set_pipe_src_size(pipe_config); 6720 6721 if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) { 6722 I915_WRITE(CHV_BLEND(pipe), CHV_BLEND_LEGACY); 6723 I915_WRITE(CHV_CANVAS(pipe), 0); 6724 } 6725 6726 i9xx_set_pipeconf(pipe_config); 6727 6728 intel_crtc->active = true; 6729 6730 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 6731 6732 intel_encoders_pre_pll_enable(crtc, pipe_config, old_state); 6733 6734 if (IS_CHERRYVIEW(dev_priv)) { 6735 chv_prepare_pll(intel_crtc, pipe_config); 6736 chv_enable_pll(intel_crtc, pipe_config); 6737 } else { 6738 vlv_prepare_pll(intel_crtc, pipe_config); 6739 vlv_enable_pll(intel_crtc, pipe_config); 6740 } 6741 6742 intel_encoders_pre_enable(crtc, pipe_config, old_state); 6743 6744 i9xx_pfit_enable(pipe_config); 6745 6746 intel_color_load_luts(pipe_config); 6747 intel_color_commit(pipe_config); 6748 /* update DSPCNTR to configure gamma for pipe bottom color */ 6749 intel_disable_primary_plane(pipe_config); 6750 6751 dev_priv->display.initial_watermarks(old_intel_state, 6752 pipe_config); 6753 intel_enable_pipe(pipe_config); 6754 6755 assert_vblank_disabled(crtc); 6756 intel_crtc_vblank_on(pipe_config); 6757 6758 intel_encoders_enable(crtc, pipe_config, old_state); 6759 } 6760 6761 static void i9xx_set_pll_dividers(const struct intel_crtc_state *crtc_state) 6762 { 6763 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 6764 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6765 6766 I915_WRITE(FP0(crtc->pipe), crtc_state->dpll_hw_state.fp0); 6767 I915_WRITE(FP1(crtc->pipe), crtc_state->dpll_hw_state.fp1); 6768 } 6769 6770 static void i9xx_crtc_enable(struct intel_crtc_state *pipe_config, 6771 struct drm_atomic_state *old_state) 6772 { 6773 struct intel_atomic_state *old_intel_state = 6774 to_intel_atomic_state(old_state); 6775 struct drm_crtc *crtc = pipe_config->base.crtc; 6776 struct drm_device *dev = crtc->dev; 6777 struct drm_i915_private *dev_priv = to_i915(dev); 6778 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6779 enum pipe pipe = intel_crtc->pipe; 6780 6781 if (WARN_ON(intel_crtc->active)) 6782 return; 6783 6784 i9xx_set_pll_dividers(pipe_config); 6785 6786 if (intel_crtc_has_dp_encoder(pipe_config)) 6787 intel_dp_set_m_n(pipe_config, M1_N1); 6788 6789 intel_set_pipe_timings(pipe_config); 6790 intel_set_pipe_src_size(pipe_config); 6791 6792 i9xx_set_pipeconf(pipe_config); 6793 6794 intel_crtc->active = true; 6795 6796 if (!IS_GEN(dev_priv, 2)) 6797 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 6798 6799 intel_encoders_pre_enable(crtc, pipe_config, old_state); 6800 6801 i9xx_enable_pll(intel_crtc, pipe_config); 6802 6803 i9xx_pfit_enable(pipe_config); 6804 6805 intel_color_load_luts(pipe_config); 6806 intel_color_commit(pipe_config); 6807 /* update DSPCNTR to configure gamma for pipe bottom color */ 6808 intel_disable_primary_plane(pipe_config); 6809 6810 if (dev_priv->display.initial_watermarks != NULL) 6811 dev_priv->display.initial_watermarks(old_intel_state, 6812 pipe_config); 6813 else 6814 intel_update_watermarks(intel_crtc); 6815 intel_enable_pipe(pipe_config); 6816 6817 assert_vblank_disabled(crtc); 6818 intel_crtc_vblank_on(pipe_config); 6819 6820 intel_encoders_enable(crtc, pipe_config, old_state); 6821 } 6822 6823 static void i9xx_pfit_disable(const struct intel_crtc_state *old_crtc_state) 6824 { 6825 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); 6826 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 6827 6828 if (!old_crtc_state->gmch_pfit.control) 6829 return; 6830 6831 assert_pipe_disabled(dev_priv, crtc->pipe); 6832 6833 DRM_DEBUG_KMS("disabling pfit, current: 0x%08x\n", 6834 I915_READ(PFIT_CONTROL)); 6835 I915_WRITE(PFIT_CONTROL, 0); 6836 } 6837 6838 static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state, 6839 struct drm_atomic_state *old_state) 6840 { 6841 struct drm_crtc *crtc = old_crtc_state->base.crtc; 6842 struct drm_device *dev = crtc->dev; 6843 struct drm_i915_private *dev_priv = to_i915(dev); 6844 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6845 int pipe = intel_crtc->pipe; 6846 6847 /* 6848 * On gen2 planes are double buffered but the pipe isn't, so we must 6849 * wait for planes to fully turn off before disabling the pipe. 6850 */ 6851 if (IS_GEN(dev_priv, 2)) 6852 intel_wait_for_vblank(dev_priv, pipe); 6853 6854 intel_encoders_disable(crtc, old_crtc_state, old_state); 6855 6856 drm_crtc_vblank_off(crtc); 6857 assert_vblank_disabled(crtc); 6858 6859 intel_disable_pipe(old_crtc_state); 6860 6861 i9xx_pfit_disable(old_crtc_state); 6862 6863 intel_encoders_post_disable(crtc, old_crtc_state, old_state); 6864 6865 if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI)) { 6866 if (IS_CHERRYVIEW(dev_priv)) 6867 chv_disable_pll(dev_priv, pipe); 6868 else if (IS_VALLEYVIEW(dev_priv)) 6869 vlv_disable_pll(dev_priv, pipe); 6870 else 6871 i9xx_disable_pll(old_crtc_state); 6872 } 6873 6874 intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state); 6875 6876 if (!IS_GEN(dev_priv, 2)) 6877 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false); 6878 6879 if (!dev_priv->display.initial_watermarks) 6880 intel_update_watermarks(intel_crtc); 6881 6882 /* clock the pipe down to 640x480@60 to potentially save power */ 6883 if (IS_I830(dev_priv)) 6884 i830_enable_pipe(dev_priv, pipe); 6885 } 6886 6887 static void intel_crtc_disable_noatomic(struct drm_crtc *crtc, 6888 struct drm_modeset_acquire_ctx *ctx) 6889 { 6890 struct intel_encoder *encoder; 6891 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6892 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 6893 struct intel_bw_state *bw_state = 6894 to_intel_bw_state(dev_priv->bw_obj.state); 6895 enum intel_display_power_domain domain; 6896 struct intel_plane *plane; 6897 u64 domains; 6898 struct drm_atomic_state *state; 6899 struct intel_crtc_state *crtc_state; 6900 int ret; 6901 6902 if (!intel_crtc->active) 6903 return; 6904 6905 for_each_intel_plane_on_crtc(&dev_priv->drm, intel_crtc, plane) { 6906 const struct intel_plane_state *plane_state = 6907 to_intel_plane_state(plane->base.state); 6908 6909 if (plane_state->base.visible) 6910 intel_plane_disable_noatomic(intel_crtc, plane); 6911 } 6912 6913 state = drm_atomic_state_alloc(crtc->dev); 6914 if (!state) { 6915 DRM_DEBUG_KMS("failed to disable [CRTC:%d:%s], out of memory", 6916 crtc->base.id, crtc->name); 6917 return; 6918 } 6919 6920 state->acquire_ctx = ctx; 6921 6922 /* Everything's already locked, -EDEADLK can't happen. */ 6923 crtc_state = intel_atomic_get_crtc_state(state, intel_crtc); 6924 ret = drm_atomic_add_affected_connectors(state, crtc); 6925 6926 WARN_ON(IS_ERR(crtc_state) || ret); 6927 6928 dev_priv->display.crtc_disable(crtc_state, state); 6929 6930 drm_atomic_state_put(state); 6931 6932 DRM_DEBUG_KMS("[CRTC:%d:%s] hw state adjusted, was enabled, now disabled\n", 6933 crtc->base.id, crtc->name); 6934 6935 WARN_ON(drm_atomic_set_mode_for_crtc(crtc->state, NULL) < 0); 6936 crtc->state->active = false; 6937 intel_crtc->active = false; 6938 crtc->enabled = false; 6939 crtc->state->connector_mask = 0; 6940 crtc->state->encoder_mask = 0; 6941 6942 for_each_encoder_on_crtc(crtc->dev, crtc, encoder) 6943 encoder->base.crtc = NULL; 6944 6945 intel_fbc_disable(intel_crtc); 6946 intel_update_watermarks(intel_crtc); 6947 intel_disable_shared_dpll(to_intel_crtc_state(crtc->state)); 6948 6949 domains = intel_crtc->enabled_power_domains; 6950 for_each_power_domain(domain, domains) 6951 intel_display_power_put_unchecked(dev_priv, domain); 6952 intel_crtc->enabled_power_domains = 0; 6953 6954 dev_priv->active_crtcs &= ~(1 << intel_crtc->pipe); 6955 dev_priv->min_cdclk[intel_crtc->pipe] = 0; 6956 dev_priv->min_voltage_level[intel_crtc->pipe] = 0; 6957 6958 bw_state->data_rate[intel_crtc->pipe] = 0; 6959 bw_state->num_active_planes[intel_crtc->pipe] = 0; 6960 } 6961 6962 /* 6963 * turn all crtc's off, but do not adjust state 6964 * This has to be paired with a call to intel_modeset_setup_hw_state. 6965 */ 6966 int intel_display_suspend(struct drm_device *dev) 6967 { 6968 struct drm_i915_private *dev_priv = to_i915(dev); 6969 struct drm_atomic_state *state; 6970 int ret; 6971 6972 state = drm_atomic_helper_suspend(dev); 6973 ret = PTR_ERR_OR_ZERO(state); 6974 if (ret) 6975 DRM_ERROR("Suspending crtc's failed with %i\n", ret); 6976 else 6977 dev_priv->modeset_restore_state = state; 6978 return ret; 6979 } 6980 6981 void intel_encoder_destroy(struct drm_encoder *encoder) 6982 { 6983 struct intel_encoder *intel_encoder = to_intel_encoder(encoder); 6984 6985 drm_encoder_cleanup(encoder); 6986 kfree(intel_encoder); 6987 } 6988 6989 /* Cross check the actual hw state with our own modeset state tracking (and it's 6990 * internal consistency). */ 6991 static void intel_connector_verify_state(struct drm_crtc_state *crtc_state, 6992 struct drm_connector_state *conn_state) 6993 { 6994 struct intel_connector *connector = to_intel_connector(conn_state->connector); 6995 6996 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 6997 connector->base.base.id, 6998 connector->base.name); 6999 7000 if (connector->get_hw_state(connector)) { 7001 struct intel_encoder *encoder = connector->encoder; 7002 7003 I915_STATE_WARN(!crtc_state, 7004 "connector enabled without attached crtc\n"); 7005 7006 if (!crtc_state) 7007 return; 7008 7009 I915_STATE_WARN(!crtc_state->active, 7010 "connector is active, but attached crtc isn't\n"); 7011 7012 if (!encoder || encoder->type == INTEL_OUTPUT_DP_MST) 7013 return; 7014 7015 I915_STATE_WARN(conn_state->best_encoder != &encoder->base, 7016 "atomic encoder doesn't match attached encoder\n"); 7017 7018 I915_STATE_WARN(conn_state->crtc != encoder->base.crtc, 7019 "attached encoder crtc differs from connector crtc\n"); 7020 } else { 7021 I915_STATE_WARN(crtc_state && crtc_state->active, 7022 "attached crtc is active, but connector isn't\n"); 7023 I915_STATE_WARN(!crtc_state && conn_state->best_encoder, 7024 "best encoder set without crtc!\n"); 7025 } 7026 } 7027 7028 static int pipe_required_fdi_lanes(struct intel_crtc_state *crtc_state) 7029 { 7030 if (crtc_state->base.enable && crtc_state->has_pch_encoder) 7031 return crtc_state->fdi_lanes; 7032 7033 return 0; 7034 } 7035 7036 static int ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe, 7037 struct intel_crtc_state *pipe_config) 7038 { 7039 struct drm_i915_private *dev_priv = to_i915(dev); 7040 struct drm_atomic_state *state = pipe_config->base.state; 7041 struct intel_crtc *other_crtc; 7042 struct intel_crtc_state *other_crtc_state; 7043 7044 DRM_DEBUG_KMS("checking fdi config on pipe %c, lanes %i\n", 7045 pipe_name(pipe), pipe_config->fdi_lanes); 7046 if (pipe_config->fdi_lanes > 4) { 7047 DRM_DEBUG_KMS("invalid fdi lane config on pipe %c: %i lanes\n", 7048 pipe_name(pipe), pipe_config->fdi_lanes); 7049 return -EINVAL; 7050 } 7051 7052 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 7053 if (pipe_config->fdi_lanes > 2) { 7054 DRM_DEBUG_KMS("only 2 lanes on haswell, required: %i lanes\n", 7055 pipe_config->fdi_lanes); 7056 return -EINVAL; 7057 } else { 7058 return 0; 7059 } 7060 } 7061 7062 if (INTEL_INFO(dev_priv)->num_pipes == 2) 7063 return 0; 7064 7065 /* Ivybridge 3 pipe is really complicated */ 7066 switch (pipe) { 7067 case PIPE_A: 7068 return 0; 7069 case PIPE_B: 7070 if (pipe_config->fdi_lanes <= 2) 7071 return 0; 7072 7073 other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_C); 7074 other_crtc_state = 7075 intel_atomic_get_crtc_state(state, other_crtc); 7076 if (IS_ERR(other_crtc_state)) 7077 return PTR_ERR(other_crtc_state); 7078 7079 if (pipe_required_fdi_lanes(other_crtc_state) > 0) { 7080 DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %c: %i lanes\n", 7081 pipe_name(pipe), pipe_config->fdi_lanes); 7082 return -EINVAL; 7083 } 7084 return 0; 7085 case PIPE_C: 7086 if (pipe_config->fdi_lanes > 2) { 7087 DRM_DEBUG_KMS("only 2 lanes on pipe %c: required %i lanes\n", 7088 pipe_name(pipe), pipe_config->fdi_lanes); 7089 return -EINVAL; 7090 } 7091 7092 other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_B); 7093 other_crtc_state = 7094 intel_atomic_get_crtc_state(state, other_crtc); 7095 if (IS_ERR(other_crtc_state)) 7096 return PTR_ERR(other_crtc_state); 7097 7098 if (pipe_required_fdi_lanes(other_crtc_state) > 2) { 7099 DRM_DEBUG_KMS("fdi link B uses too many lanes to enable link C\n"); 7100 return -EINVAL; 7101 } 7102 return 0; 7103 default: 7104 BUG(); 7105 } 7106 } 7107 7108 #define RETRY 1 7109 static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc, 7110 struct intel_crtc_state *pipe_config) 7111 { 7112 struct drm_device *dev = intel_crtc->base.dev; 7113 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 7114 int lane, link_bw, fdi_dotclock, ret; 7115 bool needs_recompute = false; 7116 7117 retry: 7118 /* FDI is a binary signal running at ~2.7GHz, encoding 7119 * each output octet as 10 bits. The actual frequency 7120 * is stored as a divider into a 100MHz clock, and the 7121 * mode pixel clock is stored in units of 1KHz. 7122 * Hence the bw of each lane in terms of the mode signal 7123 * is: 7124 */ 7125 link_bw = intel_fdi_link_freq(to_i915(dev), pipe_config); 7126 7127 fdi_dotclock = adjusted_mode->crtc_clock; 7128 7129 lane = ironlake_get_lanes_required(fdi_dotclock, link_bw, 7130 pipe_config->pipe_bpp); 7131 7132 pipe_config->fdi_lanes = lane; 7133 7134 intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock, 7135 link_bw, &pipe_config->fdi_m_n, false); 7136 7137 ret = ironlake_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config); 7138 if (ret == -EDEADLK) 7139 return ret; 7140 7141 if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) { 7142 pipe_config->pipe_bpp -= 2*3; 7143 DRM_DEBUG_KMS("fdi link bw constraint, reducing pipe bpp to %i\n", 7144 pipe_config->pipe_bpp); 7145 needs_recompute = true; 7146 pipe_config->bw_constrained = true; 7147 7148 goto retry; 7149 } 7150 7151 if (needs_recompute) 7152 return RETRY; 7153 7154 return ret; 7155 } 7156 7157 bool hsw_crtc_state_ips_capable(const struct intel_crtc_state *crtc_state) 7158 { 7159 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 7160 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7161 7162 /* IPS only exists on ULT machines and is tied to pipe A. */ 7163 if (!hsw_crtc_supports_ips(crtc)) 7164 return false; 7165 7166 if (!i915_modparams.enable_ips) 7167 return false; 7168 7169 if (crtc_state->pipe_bpp > 24) 7170 return false; 7171 7172 /* 7173 * We compare against max which means we must take 7174 * the increased cdclk requirement into account when 7175 * calculating the new cdclk. 7176 * 7177 * Should measure whether using a lower cdclk w/o IPS 7178 */ 7179 if (IS_BROADWELL(dev_priv) && 7180 crtc_state->pixel_rate > dev_priv->max_cdclk_freq * 95 / 100) 7181 return false; 7182 7183 return true; 7184 } 7185 7186 static bool hsw_compute_ips_config(struct intel_crtc_state *crtc_state) 7187 { 7188 struct drm_i915_private *dev_priv = 7189 to_i915(crtc_state->base.crtc->dev); 7190 struct intel_atomic_state *intel_state = 7191 to_intel_atomic_state(crtc_state->base.state); 7192 7193 if (!hsw_crtc_state_ips_capable(crtc_state)) 7194 return false; 7195 7196 /* 7197 * When IPS gets enabled, the pipe CRC changes. Since IPS gets 7198 * enabled and disabled dynamically based on package C states, 7199 * user space can't make reliable use of the CRCs, so let's just 7200 * completely disable it. 7201 */ 7202 if (crtc_state->crc_enabled) 7203 return false; 7204 7205 /* IPS should be fine as long as at least one plane is enabled. */ 7206 if (!(crtc_state->active_planes & ~BIT(PLANE_CURSOR))) 7207 return false; 7208 7209 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */ 7210 if (IS_BROADWELL(dev_priv) && 7211 crtc_state->pixel_rate > intel_state->cdclk.logical.cdclk * 95 / 100) 7212 return false; 7213 7214 return true; 7215 } 7216 7217 static bool intel_crtc_supports_double_wide(const struct intel_crtc *crtc) 7218 { 7219 const struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7220 7221 /* GDG double wide on either pipe, otherwise pipe A only */ 7222 return INTEL_GEN(dev_priv) < 4 && 7223 (crtc->pipe == PIPE_A || IS_I915G(dev_priv)); 7224 } 7225 7226 static u32 ilk_pipe_pixel_rate(const struct intel_crtc_state *pipe_config) 7227 { 7228 u32 pixel_rate; 7229 7230 pixel_rate = pipe_config->base.adjusted_mode.crtc_clock; 7231 7232 /* 7233 * We only use IF-ID interlacing. If we ever use 7234 * PF-ID we'll need to adjust the pixel_rate here. 7235 */ 7236 7237 if (pipe_config->pch_pfit.enabled) { 7238 u64 pipe_w, pipe_h, pfit_w, pfit_h; 7239 u32 pfit_size = pipe_config->pch_pfit.size; 7240 7241 pipe_w = pipe_config->pipe_src_w; 7242 pipe_h = pipe_config->pipe_src_h; 7243 7244 pfit_w = (pfit_size >> 16) & 0xFFFF; 7245 pfit_h = pfit_size & 0xFFFF; 7246 if (pipe_w < pfit_w) 7247 pipe_w = pfit_w; 7248 if (pipe_h < pfit_h) 7249 pipe_h = pfit_h; 7250 7251 if (WARN_ON(!pfit_w || !pfit_h)) 7252 return pixel_rate; 7253 7254 pixel_rate = div_u64(mul_u32_u32(pixel_rate, pipe_w * pipe_h), 7255 pfit_w * pfit_h); 7256 } 7257 7258 return pixel_rate; 7259 } 7260 7261 static void intel_crtc_compute_pixel_rate(struct intel_crtc_state *crtc_state) 7262 { 7263 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 7264 7265 if (HAS_GMCH(dev_priv)) 7266 /* FIXME calculate proper pipe pixel rate for GMCH pfit */ 7267 crtc_state->pixel_rate = 7268 crtc_state->base.adjusted_mode.crtc_clock; 7269 else 7270 crtc_state->pixel_rate = 7271 ilk_pipe_pixel_rate(crtc_state); 7272 } 7273 7274 static int intel_crtc_compute_config(struct intel_crtc *crtc, 7275 struct intel_crtc_state *pipe_config) 7276 { 7277 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7278 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 7279 int clock_limit = dev_priv->max_dotclk_freq; 7280 7281 if (INTEL_GEN(dev_priv) < 4) { 7282 clock_limit = dev_priv->max_cdclk_freq * 9 / 10; 7283 7284 /* 7285 * Enable double wide mode when the dot clock 7286 * is > 90% of the (display) core speed. 7287 */ 7288 if (intel_crtc_supports_double_wide(crtc) && 7289 adjusted_mode->crtc_clock > clock_limit) { 7290 clock_limit = dev_priv->max_dotclk_freq; 7291 pipe_config->double_wide = true; 7292 } 7293 } 7294 7295 if (adjusted_mode->crtc_clock > clock_limit) { 7296 DRM_DEBUG_KMS("requested pixel clock (%d kHz) too high (max: %d kHz, double wide: %s)\n", 7297 adjusted_mode->crtc_clock, clock_limit, 7298 yesno(pipe_config->double_wide)); 7299 return -EINVAL; 7300 } 7301 7302 if ((pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 || 7303 pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) && 7304 pipe_config->base.ctm) { 7305 /* 7306 * There is only one pipe CSC unit per pipe, and we need that 7307 * for output conversion from RGB->YCBCR. So if CTM is already 7308 * applied we can't support YCBCR420 output. 7309 */ 7310 DRM_DEBUG_KMS("YCBCR420 and CTM together are not possible\n"); 7311 return -EINVAL; 7312 } 7313 7314 /* 7315 * Pipe horizontal size must be even in: 7316 * - DVO ganged mode 7317 * - LVDS dual channel mode 7318 * - Double wide pipe 7319 */ 7320 if (pipe_config->pipe_src_w & 1) { 7321 if (pipe_config->double_wide) { 7322 DRM_DEBUG_KMS("Odd pipe source width not supported with double wide pipe\n"); 7323 return -EINVAL; 7324 } 7325 7326 if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_LVDS) && 7327 intel_is_dual_link_lvds(dev_priv)) { 7328 DRM_DEBUG_KMS("Odd pipe source width not supported with dual link LVDS\n"); 7329 return -EINVAL; 7330 } 7331 } 7332 7333 /* Cantiga+ cannot handle modes with a hsync front porch of 0. 7334 * WaPruneModeWithIncorrectHsyncOffset:ctg,elk,ilk,snb,ivb,vlv,hsw. 7335 */ 7336 if ((INTEL_GEN(dev_priv) > 4 || IS_G4X(dev_priv)) && 7337 adjusted_mode->crtc_hsync_start == adjusted_mode->crtc_hdisplay) 7338 return -EINVAL; 7339 7340 intel_crtc_compute_pixel_rate(pipe_config); 7341 7342 if (pipe_config->has_pch_encoder) 7343 return ironlake_fdi_compute_config(crtc, pipe_config); 7344 7345 return 0; 7346 } 7347 7348 static void 7349 intel_reduce_m_n_ratio(u32 *num, u32 *den) 7350 { 7351 while (*num > DATA_LINK_M_N_MASK || 7352 *den > DATA_LINK_M_N_MASK) { 7353 *num >>= 1; 7354 *den >>= 1; 7355 } 7356 } 7357 7358 static void compute_m_n(unsigned int m, unsigned int n, 7359 u32 *ret_m, u32 *ret_n, 7360 bool constant_n) 7361 { 7362 /* 7363 * Several DP dongles in particular seem to be fussy about 7364 * too large link M/N values. Give N value as 0x8000 that 7365 * should be acceptable by specific devices. 0x8000 is the 7366 * specified fixed N value for asynchronous clock mode, 7367 * which the devices expect also in synchronous clock mode. 7368 */ 7369 if (constant_n) 7370 *ret_n = 0x8000; 7371 else 7372 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX); 7373 7374 *ret_m = div_u64(mul_u32_u32(m, *ret_n), n); 7375 intel_reduce_m_n_ratio(ret_m, ret_n); 7376 } 7377 7378 void 7379 intel_link_compute_m_n(u16 bits_per_pixel, int nlanes, 7380 int pixel_clock, int link_clock, 7381 struct intel_link_m_n *m_n, 7382 bool constant_n) 7383 { 7384 m_n->tu = 64; 7385 7386 compute_m_n(bits_per_pixel * pixel_clock, 7387 link_clock * nlanes * 8, 7388 &m_n->gmch_m, &m_n->gmch_n, 7389 constant_n); 7390 7391 compute_m_n(pixel_clock, link_clock, 7392 &m_n->link_m, &m_n->link_n, 7393 constant_n); 7394 } 7395 7396 static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) 7397 { 7398 if (i915_modparams.panel_use_ssc >= 0) 7399 return i915_modparams.panel_use_ssc != 0; 7400 return dev_priv->vbt.lvds_use_ssc 7401 && !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE); 7402 } 7403 7404 static u32 pnv_dpll_compute_fp(struct dpll *dpll) 7405 { 7406 return (1 << dpll->n) << 16 | dpll->m2; 7407 } 7408 7409 static u32 i9xx_dpll_compute_fp(struct dpll *dpll) 7410 { 7411 return dpll->n << 16 | dpll->m1 << 8 | dpll->m2; 7412 } 7413 7414 static void i9xx_update_pll_dividers(struct intel_crtc *crtc, 7415 struct intel_crtc_state *crtc_state, 7416 struct dpll *reduced_clock) 7417 { 7418 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7419 u32 fp, fp2 = 0; 7420 7421 if (IS_PINEVIEW(dev_priv)) { 7422 fp = pnv_dpll_compute_fp(&crtc_state->dpll); 7423 if (reduced_clock) 7424 fp2 = pnv_dpll_compute_fp(reduced_clock); 7425 } else { 7426 fp = i9xx_dpll_compute_fp(&crtc_state->dpll); 7427 if (reduced_clock) 7428 fp2 = i9xx_dpll_compute_fp(reduced_clock); 7429 } 7430 7431 crtc_state->dpll_hw_state.fp0 = fp; 7432 7433 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) && 7434 reduced_clock) { 7435 crtc_state->dpll_hw_state.fp1 = fp2; 7436 } else { 7437 crtc_state->dpll_hw_state.fp1 = fp; 7438 } 7439 } 7440 7441 static void vlv_pllb_recal_opamp(struct drm_i915_private *dev_priv, enum pipe 7442 pipe) 7443 { 7444 u32 reg_val; 7445 7446 /* 7447 * PLLB opamp always calibrates to max value of 0x3f, force enable it 7448 * and set it to a reasonable value instead. 7449 */ 7450 reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1)); 7451 reg_val &= 0xffffff00; 7452 reg_val |= 0x00000030; 7453 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val); 7454 7455 reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13); 7456 reg_val &= 0x00ffffff; 7457 reg_val |= 0x8c000000; 7458 vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val); 7459 7460 reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1)); 7461 reg_val &= 0xffffff00; 7462 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val); 7463 7464 reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13); 7465 reg_val &= 0x00ffffff; 7466 reg_val |= 0xb0000000; 7467 vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val); 7468 } 7469 7470 static void intel_pch_transcoder_set_m_n(const struct intel_crtc_state *crtc_state, 7471 const struct intel_link_m_n *m_n) 7472 { 7473 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 7474 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7475 enum pipe pipe = crtc->pipe; 7476 7477 I915_WRITE(PCH_TRANS_DATA_M1(pipe), TU_SIZE(m_n->tu) | m_n->gmch_m); 7478 I915_WRITE(PCH_TRANS_DATA_N1(pipe), m_n->gmch_n); 7479 I915_WRITE(PCH_TRANS_LINK_M1(pipe), m_n->link_m); 7480 I915_WRITE(PCH_TRANS_LINK_N1(pipe), m_n->link_n); 7481 } 7482 7483 static bool transcoder_has_m2_n2(struct drm_i915_private *dev_priv, 7484 enum transcoder transcoder) 7485 { 7486 if (IS_HASWELL(dev_priv)) 7487 return transcoder == TRANSCODER_EDP; 7488 7489 /* 7490 * Strictly speaking some registers are available before 7491 * gen7, but we only support DRRS on gen7+ 7492 */ 7493 return IS_GEN(dev_priv, 7) || IS_CHERRYVIEW(dev_priv); 7494 } 7495 7496 static void intel_cpu_transcoder_set_m_n(const struct intel_crtc_state *crtc_state, 7497 const struct intel_link_m_n *m_n, 7498 const struct intel_link_m_n *m2_n2) 7499 { 7500 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 7501 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7502 enum pipe pipe = crtc->pipe; 7503 enum transcoder transcoder = crtc_state->cpu_transcoder; 7504 7505 if (INTEL_GEN(dev_priv) >= 5) { 7506 I915_WRITE(PIPE_DATA_M1(transcoder), TU_SIZE(m_n->tu) | m_n->gmch_m); 7507 I915_WRITE(PIPE_DATA_N1(transcoder), m_n->gmch_n); 7508 I915_WRITE(PIPE_LINK_M1(transcoder), m_n->link_m); 7509 I915_WRITE(PIPE_LINK_N1(transcoder), m_n->link_n); 7510 /* 7511 * M2_N2 registers are set only if DRRS is supported 7512 * (to make sure the registers are not unnecessarily accessed). 7513 */ 7514 if (m2_n2 && crtc_state->has_drrs && 7515 transcoder_has_m2_n2(dev_priv, transcoder)) { 7516 I915_WRITE(PIPE_DATA_M2(transcoder), 7517 TU_SIZE(m2_n2->tu) | m2_n2->gmch_m); 7518 I915_WRITE(PIPE_DATA_N2(transcoder), m2_n2->gmch_n); 7519 I915_WRITE(PIPE_LINK_M2(transcoder), m2_n2->link_m); 7520 I915_WRITE(PIPE_LINK_N2(transcoder), m2_n2->link_n); 7521 } 7522 } else { 7523 I915_WRITE(PIPE_DATA_M_G4X(pipe), TU_SIZE(m_n->tu) | m_n->gmch_m); 7524 I915_WRITE(PIPE_DATA_N_G4X(pipe), m_n->gmch_n); 7525 I915_WRITE(PIPE_LINK_M_G4X(pipe), m_n->link_m); 7526 I915_WRITE(PIPE_LINK_N_G4X(pipe), m_n->link_n); 7527 } 7528 } 7529 7530 void intel_dp_set_m_n(const struct intel_crtc_state *crtc_state, enum link_m_n_set m_n) 7531 { 7532 const struct intel_link_m_n *dp_m_n, *dp_m2_n2 = NULL; 7533 7534 if (m_n == M1_N1) { 7535 dp_m_n = &crtc_state->dp_m_n; 7536 dp_m2_n2 = &crtc_state->dp_m2_n2; 7537 } else if (m_n == M2_N2) { 7538 7539 /* 7540 * M2_N2 registers are not supported. Hence m2_n2 divider value 7541 * needs to be programmed into M1_N1. 7542 */ 7543 dp_m_n = &crtc_state->dp_m2_n2; 7544 } else { 7545 DRM_ERROR("Unsupported divider value\n"); 7546 return; 7547 } 7548 7549 if (crtc_state->has_pch_encoder) 7550 intel_pch_transcoder_set_m_n(crtc_state, &crtc_state->dp_m_n); 7551 else 7552 intel_cpu_transcoder_set_m_n(crtc_state, dp_m_n, dp_m2_n2); 7553 } 7554 7555 static void vlv_compute_dpll(struct intel_crtc *crtc, 7556 struct intel_crtc_state *pipe_config) 7557 { 7558 pipe_config->dpll_hw_state.dpll = DPLL_INTEGRATED_REF_CLK_VLV | 7559 DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS; 7560 if (crtc->pipe != PIPE_A) 7561 pipe_config->dpll_hw_state.dpll |= DPLL_INTEGRATED_CRI_CLK_VLV; 7562 7563 /* DPLL not used with DSI, but still need the rest set up */ 7564 if (!intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DSI)) 7565 pipe_config->dpll_hw_state.dpll |= DPLL_VCO_ENABLE | 7566 DPLL_EXT_BUFFER_ENABLE_VLV; 7567 7568 pipe_config->dpll_hw_state.dpll_md = 7569 (pipe_config->pixel_multiplier - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT; 7570 } 7571 7572 static void chv_compute_dpll(struct intel_crtc *crtc, 7573 struct intel_crtc_state *pipe_config) 7574 { 7575 pipe_config->dpll_hw_state.dpll = DPLL_SSC_REF_CLK_CHV | 7576 DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS; 7577 if (crtc->pipe != PIPE_A) 7578 pipe_config->dpll_hw_state.dpll |= DPLL_INTEGRATED_CRI_CLK_VLV; 7579 7580 /* DPLL not used with DSI, but still need the rest set up */ 7581 if (!intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DSI)) 7582 pipe_config->dpll_hw_state.dpll |= DPLL_VCO_ENABLE; 7583 7584 pipe_config->dpll_hw_state.dpll_md = 7585 (pipe_config->pixel_multiplier - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT; 7586 } 7587 7588 static void vlv_prepare_pll(struct intel_crtc *crtc, 7589 const struct intel_crtc_state *pipe_config) 7590 { 7591 struct drm_device *dev = crtc->base.dev; 7592 struct drm_i915_private *dev_priv = to_i915(dev); 7593 enum pipe pipe = crtc->pipe; 7594 u32 mdiv; 7595 u32 bestn, bestm1, bestm2, bestp1, bestp2; 7596 u32 coreclk, reg_val; 7597 7598 /* Enable Refclk */ 7599 I915_WRITE(DPLL(pipe), 7600 pipe_config->dpll_hw_state.dpll & 7601 ~(DPLL_VCO_ENABLE | DPLL_EXT_BUFFER_ENABLE_VLV)); 7602 7603 /* No need to actually set up the DPLL with DSI */ 7604 if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0) 7605 return; 7606 7607 vlv_dpio_get(dev_priv); 7608 7609 bestn = pipe_config->dpll.n; 7610 bestm1 = pipe_config->dpll.m1; 7611 bestm2 = pipe_config->dpll.m2; 7612 bestp1 = pipe_config->dpll.p1; 7613 bestp2 = pipe_config->dpll.p2; 7614 7615 /* See eDP HDMI DPIO driver vbios notes doc */ 7616 7617 /* PLL B needs special handling */ 7618 if (pipe == PIPE_B) 7619 vlv_pllb_recal_opamp(dev_priv, pipe); 7620 7621 /* Set up Tx target for periodic Rcomp update */ 7622 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9_BCAST, 0x0100000f); 7623 7624 /* Disable target IRef on PLL */ 7625 reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW8(pipe)); 7626 reg_val &= 0x00ffffff; 7627 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW8(pipe), reg_val); 7628 7629 /* Disable fast lock */ 7630 vlv_dpio_write(dev_priv, pipe, VLV_CMN_DW0, 0x610); 7631 7632 /* Set idtafcrecal before PLL is enabled */ 7633 mdiv = ((bestm1 << DPIO_M1DIV_SHIFT) | (bestm2 & DPIO_M2DIV_MASK)); 7634 mdiv |= ((bestp1 << DPIO_P1_SHIFT) | (bestp2 << DPIO_P2_SHIFT)); 7635 mdiv |= ((bestn << DPIO_N_SHIFT)); 7636 mdiv |= (1 << DPIO_K_SHIFT); 7637 7638 /* 7639 * Post divider depends on pixel clock rate, DAC vs digital (and LVDS, 7640 * but we don't support that). 7641 * Note: don't use the DAC post divider as it seems unstable. 7642 */ 7643 mdiv |= (DPIO_POST_DIV_HDMIDP << DPIO_POST_DIV_SHIFT); 7644 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv); 7645 7646 mdiv |= DPIO_ENABLE_CALIBRATION; 7647 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv); 7648 7649 /* Set HBR and RBR LPF coefficients */ 7650 if (pipe_config->port_clock == 162000 || 7651 intel_crtc_has_type(pipe_config, INTEL_OUTPUT_ANALOG) || 7652 intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI)) 7653 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe), 7654 0x009f0003); 7655 else 7656 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe), 7657 0x00d0000f); 7658 7659 if (intel_crtc_has_dp_encoder(pipe_config)) { 7660 /* Use SSC source */ 7661 if (pipe == PIPE_A) 7662 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe), 7663 0x0df40000); 7664 else 7665 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe), 7666 0x0df70000); 7667 } else { /* HDMI or VGA */ 7668 /* Use bend source */ 7669 if (pipe == PIPE_A) 7670 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe), 7671 0x0df70000); 7672 else 7673 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe), 7674 0x0df40000); 7675 } 7676 7677 coreclk = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW7(pipe)); 7678 coreclk = (coreclk & 0x0000ff00) | 0x01c00000; 7679 if (intel_crtc_has_dp_encoder(pipe_config)) 7680 coreclk |= 0x01000000; 7681 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW7(pipe), coreclk); 7682 7683 vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW11(pipe), 0x87871000); 7684 7685 vlv_dpio_put(dev_priv); 7686 } 7687 7688 static void chv_prepare_pll(struct intel_crtc *crtc, 7689 const struct intel_crtc_state *pipe_config) 7690 { 7691 struct drm_device *dev = crtc->base.dev; 7692 struct drm_i915_private *dev_priv = to_i915(dev); 7693 enum pipe pipe = crtc->pipe; 7694 enum dpio_channel port = vlv_pipe_to_channel(pipe); 7695 u32 loopfilter, tribuf_calcntr; 7696 u32 bestn, bestm1, bestm2, bestp1, bestp2, bestm2_frac; 7697 u32 dpio_val; 7698 int vco; 7699 7700 /* Enable Refclk and SSC */ 7701 I915_WRITE(DPLL(pipe), 7702 pipe_config->dpll_hw_state.dpll & ~DPLL_VCO_ENABLE); 7703 7704 /* No need to actually set up the DPLL with DSI */ 7705 if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0) 7706 return; 7707 7708 bestn = pipe_config->dpll.n; 7709 bestm2_frac = pipe_config->dpll.m2 & 0x3fffff; 7710 bestm1 = pipe_config->dpll.m1; 7711 bestm2 = pipe_config->dpll.m2 >> 22; 7712 bestp1 = pipe_config->dpll.p1; 7713 bestp2 = pipe_config->dpll.p2; 7714 vco = pipe_config->dpll.vco; 7715 dpio_val = 0; 7716 loopfilter = 0; 7717 7718 vlv_dpio_get(dev_priv); 7719 7720 /* p1 and p2 divider */ 7721 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW13(port), 7722 5 << DPIO_CHV_S1_DIV_SHIFT | 7723 bestp1 << DPIO_CHV_P1_DIV_SHIFT | 7724 bestp2 << DPIO_CHV_P2_DIV_SHIFT | 7725 1 << DPIO_CHV_K_DIV_SHIFT); 7726 7727 /* Feedback post-divider - m2 */ 7728 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW0(port), bestm2); 7729 7730 /* Feedback refclk divider - n and m1 */ 7731 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW1(port), 7732 DPIO_CHV_M1_DIV_BY_2 | 7733 1 << DPIO_CHV_N_DIV_SHIFT); 7734 7735 /* M2 fraction division */ 7736 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW2(port), bestm2_frac); 7737 7738 /* M2 fraction division enable */ 7739 dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW3(port)); 7740 dpio_val &= ~(DPIO_CHV_FEEDFWD_GAIN_MASK | DPIO_CHV_FRAC_DIV_EN); 7741 dpio_val |= (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT); 7742 if (bestm2_frac) 7743 dpio_val |= DPIO_CHV_FRAC_DIV_EN; 7744 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW3(port), dpio_val); 7745 7746 /* Program digital lock detect threshold */ 7747 dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW9(port)); 7748 dpio_val &= ~(DPIO_CHV_INT_LOCK_THRESHOLD_MASK | 7749 DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE); 7750 dpio_val |= (0x5 << DPIO_CHV_INT_LOCK_THRESHOLD_SHIFT); 7751 if (!bestm2_frac) 7752 dpio_val |= DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE; 7753 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW9(port), dpio_val); 7754 7755 /* Loop filter */ 7756 if (vco == 5400000) { 7757 loopfilter |= (0x3 << DPIO_CHV_PROP_COEFF_SHIFT); 7758 loopfilter |= (0x8 << DPIO_CHV_INT_COEFF_SHIFT); 7759 loopfilter |= (0x1 << DPIO_CHV_GAIN_CTRL_SHIFT); 7760 tribuf_calcntr = 0x9; 7761 } else if (vco <= 6200000) { 7762 loopfilter |= (0x5 << DPIO_CHV_PROP_COEFF_SHIFT); 7763 loopfilter |= (0xB << DPIO_CHV_INT_COEFF_SHIFT); 7764 loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT); 7765 tribuf_calcntr = 0x9; 7766 } else if (vco <= 6480000) { 7767 loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT); 7768 loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT); 7769 loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT); 7770 tribuf_calcntr = 0x8; 7771 } else { 7772 /* Not supported. Apply the same limits as in the max case */ 7773 loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT); 7774 loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT); 7775 loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT); 7776 tribuf_calcntr = 0; 7777 } 7778 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW6(port), loopfilter); 7779 7780 dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW8(port)); 7781 dpio_val &= ~DPIO_CHV_TDC_TARGET_CNT_MASK; 7782 dpio_val |= (tribuf_calcntr << DPIO_CHV_TDC_TARGET_CNT_SHIFT); 7783 vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW8(port), dpio_val); 7784 7785 /* AFC Recal */ 7786 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), 7787 vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port)) | 7788 DPIO_AFC_RECAL); 7789 7790 vlv_dpio_put(dev_priv); 7791 } 7792 7793 /** 7794 * vlv_force_pll_on - forcibly enable just the PLL 7795 * @dev_priv: i915 private structure 7796 * @pipe: pipe PLL to enable 7797 * @dpll: PLL configuration 7798 * 7799 * Enable the PLL for @pipe using the supplied @dpll config. To be used 7800 * in cases where we need the PLL enabled even when @pipe is not going to 7801 * be enabled. 7802 */ 7803 int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe, 7804 const struct dpll *dpll) 7805 { 7806 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 7807 struct intel_crtc_state *pipe_config; 7808 7809 pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL); 7810 if (!pipe_config) 7811 return -ENOMEM; 7812 7813 pipe_config->base.crtc = &crtc->base; 7814 pipe_config->pixel_multiplier = 1; 7815 pipe_config->dpll = *dpll; 7816 7817 if (IS_CHERRYVIEW(dev_priv)) { 7818 chv_compute_dpll(crtc, pipe_config); 7819 chv_prepare_pll(crtc, pipe_config); 7820 chv_enable_pll(crtc, pipe_config); 7821 } else { 7822 vlv_compute_dpll(crtc, pipe_config); 7823 vlv_prepare_pll(crtc, pipe_config); 7824 vlv_enable_pll(crtc, pipe_config); 7825 } 7826 7827 kfree(pipe_config); 7828 7829 return 0; 7830 } 7831 7832 /** 7833 * vlv_force_pll_off - forcibly disable just the PLL 7834 * @dev_priv: i915 private structure 7835 * @pipe: pipe PLL to disable 7836 * 7837 * Disable the PLL for @pipe. To be used in cases where we need 7838 * the PLL enabled even when @pipe is not going to be enabled. 7839 */ 7840 void vlv_force_pll_off(struct drm_i915_private *dev_priv, enum pipe pipe) 7841 { 7842 if (IS_CHERRYVIEW(dev_priv)) 7843 chv_disable_pll(dev_priv, pipe); 7844 else 7845 vlv_disable_pll(dev_priv, pipe); 7846 } 7847 7848 static void i9xx_compute_dpll(struct intel_crtc *crtc, 7849 struct intel_crtc_state *crtc_state, 7850 struct dpll *reduced_clock) 7851 { 7852 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7853 u32 dpll; 7854 struct dpll *clock = &crtc_state->dpll; 7855 7856 i9xx_update_pll_dividers(crtc, crtc_state, reduced_clock); 7857 7858 dpll = DPLL_VGA_MODE_DIS; 7859 7860 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) 7861 dpll |= DPLLB_MODE_LVDS; 7862 else 7863 dpll |= DPLLB_MODE_DAC_SERIAL; 7864 7865 if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) || 7866 IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) { 7867 dpll |= (crtc_state->pixel_multiplier - 1) 7868 << SDVO_MULTIPLIER_SHIFT_HIRES; 7869 } 7870 7871 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO) || 7872 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) 7873 dpll |= DPLL_SDVO_HIGH_SPEED; 7874 7875 if (intel_crtc_has_dp_encoder(crtc_state)) 7876 dpll |= DPLL_SDVO_HIGH_SPEED; 7877 7878 /* compute bitmask from p1 value */ 7879 if (IS_PINEVIEW(dev_priv)) 7880 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW; 7881 else { 7882 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; 7883 if (IS_G4X(dev_priv) && reduced_clock) 7884 dpll |= (1 << (reduced_clock->p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; 7885 } 7886 switch (clock->p2) { 7887 case 5: 7888 dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5; 7889 break; 7890 case 7: 7891 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7; 7892 break; 7893 case 10: 7894 dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10; 7895 break; 7896 case 14: 7897 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; 7898 break; 7899 } 7900 if (INTEL_GEN(dev_priv) >= 4) 7901 dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); 7902 7903 if (crtc_state->sdvo_tv_clock) 7904 dpll |= PLL_REF_INPUT_TVCLKINBC; 7905 else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) && 7906 intel_panel_use_ssc(dev_priv)) 7907 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; 7908 else 7909 dpll |= PLL_REF_INPUT_DREFCLK; 7910 7911 dpll |= DPLL_VCO_ENABLE; 7912 crtc_state->dpll_hw_state.dpll = dpll; 7913 7914 if (INTEL_GEN(dev_priv) >= 4) { 7915 u32 dpll_md = (crtc_state->pixel_multiplier - 1) 7916 << DPLL_MD_UDI_MULTIPLIER_SHIFT; 7917 crtc_state->dpll_hw_state.dpll_md = dpll_md; 7918 } 7919 } 7920 7921 static void i8xx_compute_dpll(struct intel_crtc *crtc, 7922 struct intel_crtc_state *crtc_state, 7923 struct dpll *reduced_clock) 7924 { 7925 struct drm_device *dev = crtc->base.dev; 7926 struct drm_i915_private *dev_priv = to_i915(dev); 7927 u32 dpll; 7928 struct dpll *clock = &crtc_state->dpll; 7929 7930 i9xx_update_pll_dividers(crtc, crtc_state, reduced_clock); 7931 7932 dpll = DPLL_VGA_MODE_DIS; 7933 7934 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 7935 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; 7936 } else { 7937 if (clock->p1 == 2) 7938 dpll |= PLL_P1_DIVIDE_BY_TWO; 7939 else 7940 dpll |= (clock->p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT; 7941 if (clock->p2 == 4) 7942 dpll |= PLL_P2_DIVIDE_BY_4; 7943 } 7944 7945 /* 7946 * Bspec: 7947 * "[Almador Errata}: For the correct operation of the muxed DVO pins 7948 * (GDEVSELB/I2Cdata, GIRDBY/I2CClk) and (GFRAMEB/DVI_Data, 7949 * GTRDYB/DVI_Clk): Bit 31 (DPLL VCO Enable) and Bit 30 (2X Clock 7950 * Enable) must be set to “1” in both the DPLL A Control Register 7951 * (06014h-06017h) and DPLL B Control Register (06018h-0601Bh)." 7952 * 7953 * For simplicity We simply keep both bits always enabled in 7954 * both DPLLS. The spec says we should disable the DVO 2X clock 7955 * when not needed, but this seems to work fine in practice. 7956 */ 7957 if (IS_I830(dev_priv) || 7958 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DVO)) 7959 dpll |= DPLL_DVO_2X_MODE; 7960 7961 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) && 7962 intel_panel_use_ssc(dev_priv)) 7963 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; 7964 else 7965 dpll |= PLL_REF_INPUT_DREFCLK; 7966 7967 dpll |= DPLL_VCO_ENABLE; 7968 crtc_state->dpll_hw_state.dpll = dpll; 7969 } 7970 7971 static void intel_set_pipe_timings(const struct intel_crtc_state *crtc_state) 7972 { 7973 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 7974 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 7975 enum pipe pipe = crtc->pipe; 7976 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 7977 const struct drm_display_mode *adjusted_mode = &crtc_state->base.adjusted_mode; 7978 u32 crtc_vtotal, crtc_vblank_end; 7979 int vsyncshift = 0; 7980 7981 /* We need to be careful not to changed the adjusted mode, for otherwise 7982 * the hw state checker will get angry at the mismatch. */ 7983 crtc_vtotal = adjusted_mode->crtc_vtotal; 7984 crtc_vblank_end = adjusted_mode->crtc_vblank_end; 7985 7986 if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { 7987 /* the chip adds 2 halflines automatically */ 7988 crtc_vtotal -= 1; 7989 crtc_vblank_end -= 1; 7990 7991 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 7992 vsyncshift = (adjusted_mode->crtc_htotal - 1) / 2; 7993 else 7994 vsyncshift = adjusted_mode->crtc_hsync_start - 7995 adjusted_mode->crtc_htotal / 2; 7996 if (vsyncshift < 0) 7997 vsyncshift += adjusted_mode->crtc_htotal; 7998 } 7999 8000 if (INTEL_GEN(dev_priv) > 3) 8001 I915_WRITE(VSYNCSHIFT(cpu_transcoder), vsyncshift); 8002 8003 I915_WRITE(HTOTAL(cpu_transcoder), 8004 (adjusted_mode->crtc_hdisplay - 1) | 8005 ((adjusted_mode->crtc_htotal - 1) << 16)); 8006 I915_WRITE(HBLANK(cpu_transcoder), 8007 (adjusted_mode->crtc_hblank_start - 1) | 8008 ((adjusted_mode->crtc_hblank_end - 1) << 16)); 8009 I915_WRITE(HSYNC(cpu_transcoder), 8010 (adjusted_mode->crtc_hsync_start - 1) | 8011 ((adjusted_mode->crtc_hsync_end - 1) << 16)); 8012 8013 I915_WRITE(VTOTAL(cpu_transcoder), 8014 (adjusted_mode->crtc_vdisplay - 1) | 8015 ((crtc_vtotal - 1) << 16)); 8016 I915_WRITE(VBLANK(cpu_transcoder), 8017 (adjusted_mode->crtc_vblank_start - 1) | 8018 ((crtc_vblank_end - 1) << 16)); 8019 I915_WRITE(VSYNC(cpu_transcoder), 8020 (adjusted_mode->crtc_vsync_start - 1) | 8021 ((adjusted_mode->crtc_vsync_end - 1) << 16)); 8022 8023 /* Workaround: when the EDP input selection is B, the VTOTAL_B must be 8024 * programmed with the VTOTAL_EDP value. Same for VTOTAL_C. This is 8025 * documented on the DDI_FUNC_CTL register description, EDP Input Select 8026 * bits. */ 8027 if (IS_HASWELL(dev_priv) && cpu_transcoder == TRANSCODER_EDP && 8028 (pipe == PIPE_B || pipe == PIPE_C)) 8029 I915_WRITE(VTOTAL(pipe), I915_READ(VTOTAL(cpu_transcoder))); 8030 8031 } 8032 8033 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state) 8034 { 8035 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 8036 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8037 enum pipe pipe = crtc->pipe; 8038 8039 /* pipesrc controls the size that is scaled from, which should 8040 * always be the user's requested size. 8041 */ 8042 I915_WRITE(PIPESRC(pipe), 8043 ((crtc_state->pipe_src_w - 1) << 16) | 8044 (crtc_state->pipe_src_h - 1)); 8045 } 8046 8047 static void intel_get_pipe_timings(struct intel_crtc *crtc, 8048 struct intel_crtc_state *pipe_config) 8049 { 8050 struct drm_device *dev = crtc->base.dev; 8051 struct drm_i915_private *dev_priv = to_i915(dev); 8052 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; 8053 u32 tmp; 8054 8055 tmp = I915_READ(HTOTAL(cpu_transcoder)); 8056 pipe_config->base.adjusted_mode.crtc_hdisplay = (tmp & 0xffff) + 1; 8057 pipe_config->base.adjusted_mode.crtc_htotal = ((tmp >> 16) & 0xffff) + 1; 8058 8059 if (!transcoder_is_dsi(cpu_transcoder)) { 8060 tmp = I915_READ(HBLANK(cpu_transcoder)); 8061 pipe_config->base.adjusted_mode.crtc_hblank_start = 8062 (tmp & 0xffff) + 1; 8063 pipe_config->base.adjusted_mode.crtc_hblank_end = 8064 ((tmp >> 16) & 0xffff) + 1; 8065 } 8066 tmp = I915_READ(HSYNC(cpu_transcoder)); 8067 pipe_config->base.adjusted_mode.crtc_hsync_start = (tmp & 0xffff) + 1; 8068 pipe_config->base.adjusted_mode.crtc_hsync_end = ((tmp >> 16) & 0xffff) + 1; 8069 8070 tmp = I915_READ(VTOTAL(cpu_transcoder)); 8071 pipe_config->base.adjusted_mode.crtc_vdisplay = (tmp & 0xffff) + 1; 8072 pipe_config->base.adjusted_mode.crtc_vtotal = ((tmp >> 16) & 0xffff) + 1; 8073 8074 if (!transcoder_is_dsi(cpu_transcoder)) { 8075 tmp = I915_READ(VBLANK(cpu_transcoder)); 8076 pipe_config->base.adjusted_mode.crtc_vblank_start = 8077 (tmp & 0xffff) + 1; 8078 pipe_config->base.adjusted_mode.crtc_vblank_end = 8079 ((tmp >> 16) & 0xffff) + 1; 8080 } 8081 tmp = I915_READ(VSYNC(cpu_transcoder)); 8082 pipe_config->base.adjusted_mode.crtc_vsync_start = (tmp & 0xffff) + 1; 8083 pipe_config->base.adjusted_mode.crtc_vsync_end = ((tmp >> 16) & 0xffff) + 1; 8084 8085 if (I915_READ(PIPECONF(cpu_transcoder)) & PIPECONF_INTERLACE_MASK) { 8086 pipe_config->base.adjusted_mode.flags |= DRM_MODE_FLAG_INTERLACE; 8087 pipe_config->base.adjusted_mode.crtc_vtotal += 1; 8088 pipe_config->base.adjusted_mode.crtc_vblank_end += 1; 8089 } 8090 } 8091 8092 static void intel_get_pipe_src_size(struct intel_crtc *crtc, 8093 struct intel_crtc_state *pipe_config) 8094 { 8095 struct drm_device *dev = crtc->base.dev; 8096 struct drm_i915_private *dev_priv = to_i915(dev); 8097 u32 tmp; 8098 8099 tmp = I915_READ(PIPESRC(crtc->pipe)); 8100 pipe_config->pipe_src_h = (tmp & 0xffff) + 1; 8101 pipe_config->pipe_src_w = ((tmp >> 16) & 0xffff) + 1; 8102 8103 pipe_config->base.mode.vdisplay = pipe_config->pipe_src_h; 8104 pipe_config->base.mode.hdisplay = pipe_config->pipe_src_w; 8105 } 8106 8107 void intel_mode_from_pipe_config(struct drm_display_mode *mode, 8108 struct intel_crtc_state *pipe_config) 8109 { 8110 mode->hdisplay = pipe_config->base.adjusted_mode.crtc_hdisplay; 8111 mode->htotal = pipe_config->base.adjusted_mode.crtc_htotal; 8112 mode->hsync_start = pipe_config->base.adjusted_mode.crtc_hsync_start; 8113 mode->hsync_end = pipe_config->base.adjusted_mode.crtc_hsync_end; 8114 8115 mode->vdisplay = pipe_config->base.adjusted_mode.crtc_vdisplay; 8116 mode->vtotal = pipe_config->base.adjusted_mode.crtc_vtotal; 8117 mode->vsync_start = pipe_config->base.adjusted_mode.crtc_vsync_start; 8118 mode->vsync_end = pipe_config->base.adjusted_mode.crtc_vsync_end; 8119 8120 mode->flags = pipe_config->base.adjusted_mode.flags; 8121 mode->type = DRM_MODE_TYPE_DRIVER; 8122 8123 mode->clock = pipe_config->base.adjusted_mode.crtc_clock; 8124 8125 mode->hsync = drm_mode_hsync(mode); 8126 mode->vrefresh = drm_mode_vrefresh(mode); 8127 drm_mode_set_name(mode); 8128 } 8129 8130 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state) 8131 { 8132 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 8133 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8134 u32 pipeconf; 8135 8136 pipeconf = 0; 8137 8138 /* we keep both pipes enabled on 830 */ 8139 if (IS_I830(dev_priv)) 8140 pipeconf |= I915_READ(PIPECONF(crtc->pipe)) & PIPECONF_ENABLE; 8141 8142 if (crtc_state->double_wide) 8143 pipeconf |= PIPECONF_DOUBLE_WIDE; 8144 8145 /* only g4x and later have fancy bpc/dither controls */ 8146 if (IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) || 8147 IS_CHERRYVIEW(dev_priv)) { 8148 /* Bspec claims that we can't use dithering for 30bpp pipes. */ 8149 if (crtc_state->dither && crtc_state->pipe_bpp != 30) 8150 pipeconf |= PIPECONF_DITHER_EN | 8151 PIPECONF_DITHER_TYPE_SP; 8152 8153 switch (crtc_state->pipe_bpp) { 8154 case 18: 8155 pipeconf |= PIPECONF_6BPC; 8156 break; 8157 case 24: 8158 pipeconf |= PIPECONF_8BPC; 8159 break; 8160 case 30: 8161 pipeconf |= PIPECONF_10BPC; 8162 break; 8163 default: 8164 /* Case prevented by intel_choose_pipe_bpp_dither. */ 8165 BUG(); 8166 } 8167 } 8168 8169 if (crtc_state->base.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) { 8170 if (INTEL_GEN(dev_priv) < 4 || 8171 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 8172 pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION; 8173 else 8174 pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT; 8175 } else { 8176 pipeconf |= PIPECONF_PROGRESSIVE; 8177 } 8178 8179 if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) && 8180 crtc_state->limited_color_range) 8181 pipeconf |= PIPECONF_COLOR_RANGE_SELECT; 8182 8183 pipeconf |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode); 8184 8185 I915_WRITE(PIPECONF(crtc->pipe), pipeconf); 8186 POSTING_READ(PIPECONF(crtc->pipe)); 8187 } 8188 8189 static int i8xx_crtc_compute_clock(struct intel_crtc *crtc, 8190 struct intel_crtc_state *crtc_state) 8191 { 8192 struct drm_device *dev = crtc->base.dev; 8193 struct drm_i915_private *dev_priv = to_i915(dev); 8194 const struct intel_limit *limit; 8195 int refclk = 48000; 8196 8197 memset(&crtc_state->dpll_hw_state, 0, 8198 sizeof(crtc_state->dpll_hw_state)); 8199 8200 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 8201 if (intel_panel_use_ssc(dev_priv)) { 8202 refclk = dev_priv->vbt.lvds_ssc_freq; 8203 DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", refclk); 8204 } 8205 8206 limit = &intel_limits_i8xx_lvds; 8207 } else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DVO)) { 8208 limit = &intel_limits_i8xx_dvo; 8209 } else { 8210 limit = &intel_limits_i8xx_dac; 8211 } 8212 8213 if (!crtc_state->clock_set && 8214 !i9xx_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8215 refclk, NULL, &crtc_state->dpll)) { 8216 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8217 return -EINVAL; 8218 } 8219 8220 i8xx_compute_dpll(crtc, crtc_state, NULL); 8221 8222 return 0; 8223 } 8224 8225 static int g4x_crtc_compute_clock(struct intel_crtc *crtc, 8226 struct intel_crtc_state *crtc_state) 8227 { 8228 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8229 const struct intel_limit *limit; 8230 int refclk = 96000; 8231 8232 memset(&crtc_state->dpll_hw_state, 0, 8233 sizeof(crtc_state->dpll_hw_state)); 8234 8235 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 8236 if (intel_panel_use_ssc(dev_priv)) { 8237 refclk = dev_priv->vbt.lvds_ssc_freq; 8238 DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", refclk); 8239 } 8240 8241 if (intel_is_dual_link_lvds(dev_priv)) 8242 limit = &intel_limits_g4x_dual_channel_lvds; 8243 else 8244 limit = &intel_limits_g4x_single_channel_lvds; 8245 } else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) || 8246 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) { 8247 limit = &intel_limits_g4x_hdmi; 8248 } else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) { 8249 limit = &intel_limits_g4x_sdvo; 8250 } else { 8251 /* The option is for other outputs */ 8252 limit = &intel_limits_i9xx_sdvo; 8253 } 8254 8255 if (!crtc_state->clock_set && 8256 !g4x_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8257 refclk, NULL, &crtc_state->dpll)) { 8258 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8259 return -EINVAL; 8260 } 8261 8262 i9xx_compute_dpll(crtc, crtc_state, NULL); 8263 8264 return 0; 8265 } 8266 8267 static int pnv_crtc_compute_clock(struct intel_crtc *crtc, 8268 struct intel_crtc_state *crtc_state) 8269 { 8270 struct drm_device *dev = crtc->base.dev; 8271 struct drm_i915_private *dev_priv = to_i915(dev); 8272 const struct intel_limit *limit; 8273 int refclk = 96000; 8274 8275 memset(&crtc_state->dpll_hw_state, 0, 8276 sizeof(crtc_state->dpll_hw_state)); 8277 8278 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 8279 if (intel_panel_use_ssc(dev_priv)) { 8280 refclk = dev_priv->vbt.lvds_ssc_freq; 8281 DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", refclk); 8282 } 8283 8284 limit = &intel_limits_pineview_lvds; 8285 } else { 8286 limit = &intel_limits_pineview_sdvo; 8287 } 8288 8289 if (!crtc_state->clock_set && 8290 !pnv_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8291 refclk, NULL, &crtc_state->dpll)) { 8292 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8293 return -EINVAL; 8294 } 8295 8296 i9xx_compute_dpll(crtc, crtc_state, NULL); 8297 8298 return 0; 8299 } 8300 8301 static int i9xx_crtc_compute_clock(struct intel_crtc *crtc, 8302 struct intel_crtc_state *crtc_state) 8303 { 8304 struct drm_device *dev = crtc->base.dev; 8305 struct drm_i915_private *dev_priv = to_i915(dev); 8306 const struct intel_limit *limit; 8307 int refclk = 96000; 8308 8309 memset(&crtc_state->dpll_hw_state, 0, 8310 sizeof(crtc_state->dpll_hw_state)); 8311 8312 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 8313 if (intel_panel_use_ssc(dev_priv)) { 8314 refclk = dev_priv->vbt.lvds_ssc_freq; 8315 DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", refclk); 8316 } 8317 8318 limit = &intel_limits_i9xx_lvds; 8319 } else { 8320 limit = &intel_limits_i9xx_sdvo; 8321 } 8322 8323 if (!crtc_state->clock_set && 8324 !i9xx_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8325 refclk, NULL, &crtc_state->dpll)) { 8326 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8327 return -EINVAL; 8328 } 8329 8330 i9xx_compute_dpll(crtc, crtc_state, NULL); 8331 8332 return 0; 8333 } 8334 8335 static int chv_crtc_compute_clock(struct intel_crtc *crtc, 8336 struct intel_crtc_state *crtc_state) 8337 { 8338 int refclk = 100000; 8339 const struct intel_limit *limit = &intel_limits_chv; 8340 8341 memset(&crtc_state->dpll_hw_state, 0, 8342 sizeof(crtc_state->dpll_hw_state)); 8343 8344 if (!crtc_state->clock_set && 8345 !chv_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8346 refclk, NULL, &crtc_state->dpll)) { 8347 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8348 return -EINVAL; 8349 } 8350 8351 chv_compute_dpll(crtc, crtc_state); 8352 8353 return 0; 8354 } 8355 8356 static int vlv_crtc_compute_clock(struct intel_crtc *crtc, 8357 struct intel_crtc_state *crtc_state) 8358 { 8359 int refclk = 100000; 8360 const struct intel_limit *limit = &intel_limits_vlv; 8361 8362 memset(&crtc_state->dpll_hw_state, 0, 8363 sizeof(crtc_state->dpll_hw_state)); 8364 8365 if (!crtc_state->clock_set && 8366 !vlv_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 8367 refclk, NULL, &crtc_state->dpll)) { 8368 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 8369 return -EINVAL; 8370 } 8371 8372 vlv_compute_dpll(crtc, crtc_state); 8373 8374 return 0; 8375 } 8376 8377 static bool i9xx_has_pfit(struct drm_i915_private *dev_priv) 8378 { 8379 if (IS_I830(dev_priv)) 8380 return false; 8381 8382 return INTEL_GEN(dev_priv) >= 4 || 8383 IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv); 8384 } 8385 8386 static void i9xx_get_pfit_config(struct intel_crtc *crtc, 8387 struct intel_crtc_state *pipe_config) 8388 { 8389 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8390 u32 tmp; 8391 8392 if (!i9xx_has_pfit(dev_priv)) 8393 return; 8394 8395 tmp = I915_READ(PFIT_CONTROL); 8396 if (!(tmp & PFIT_ENABLE)) 8397 return; 8398 8399 /* Check whether the pfit is attached to our pipe. */ 8400 if (INTEL_GEN(dev_priv) < 4) { 8401 if (crtc->pipe != PIPE_B) 8402 return; 8403 } else { 8404 if ((tmp & PFIT_PIPE_MASK) != (crtc->pipe << PFIT_PIPE_SHIFT)) 8405 return; 8406 } 8407 8408 pipe_config->gmch_pfit.control = tmp; 8409 pipe_config->gmch_pfit.pgm_ratios = I915_READ(PFIT_PGM_RATIOS); 8410 } 8411 8412 static void vlv_crtc_clock_get(struct intel_crtc *crtc, 8413 struct intel_crtc_state *pipe_config) 8414 { 8415 struct drm_device *dev = crtc->base.dev; 8416 struct drm_i915_private *dev_priv = to_i915(dev); 8417 int pipe = pipe_config->cpu_transcoder; 8418 struct dpll clock; 8419 u32 mdiv; 8420 int refclk = 100000; 8421 8422 /* In case of DSI, DPLL will not be used */ 8423 if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0) 8424 return; 8425 8426 vlv_dpio_get(dev_priv); 8427 mdiv = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW3(pipe)); 8428 vlv_dpio_put(dev_priv); 8429 8430 clock.m1 = (mdiv >> DPIO_M1DIV_SHIFT) & 7; 8431 clock.m2 = mdiv & DPIO_M2DIV_MASK; 8432 clock.n = (mdiv >> DPIO_N_SHIFT) & 0xf; 8433 clock.p1 = (mdiv >> DPIO_P1_SHIFT) & 7; 8434 clock.p2 = (mdiv >> DPIO_P2_SHIFT) & 0x1f; 8435 8436 pipe_config->port_clock = vlv_calc_dpll_params(refclk, &clock); 8437 } 8438 8439 static void 8440 i9xx_get_initial_plane_config(struct intel_crtc *crtc, 8441 struct intel_initial_plane_config *plane_config) 8442 { 8443 struct drm_device *dev = crtc->base.dev; 8444 struct drm_i915_private *dev_priv = to_i915(dev); 8445 struct intel_plane *plane = to_intel_plane(crtc->base.primary); 8446 enum i9xx_plane_id i9xx_plane = plane->i9xx_plane; 8447 enum pipe pipe; 8448 u32 val, base, offset; 8449 int fourcc, pixel_format; 8450 unsigned int aligned_height; 8451 struct drm_framebuffer *fb; 8452 struct intel_framebuffer *intel_fb; 8453 8454 if (!plane->get_hw_state(plane, &pipe)) 8455 return; 8456 8457 WARN_ON(pipe != crtc->pipe); 8458 8459 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); 8460 if (!intel_fb) { 8461 DRM_DEBUG_KMS("failed to alloc fb\n"); 8462 return; 8463 } 8464 8465 fb = &intel_fb->base; 8466 8467 fb->dev = dev; 8468 8469 val = I915_READ(DSPCNTR(i9xx_plane)); 8470 8471 if (INTEL_GEN(dev_priv) >= 4) { 8472 if (val & DISPPLANE_TILED) { 8473 plane_config->tiling = I915_TILING_X; 8474 fb->modifier = I915_FORMAT_MOD_X_TILED; 8475 } 8476 8477 if (val & DISPPLANE_ROTATE_180) 8478 plane_config->rotation = DRM_MODE_ROTATE_180; 8479 } 8480 8481 if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B && 8482 val & DISPPLANE_MIRROR) 8483 plane_config->rotation |= DRM_MODE_REFLECT_X; 8484 8485 pixel_format = val & DISPPLANE_PIXFORMAT_MASK; 8486 fourcc = i9xx_format_to_fourcc(pixel_format); 8487 fb->format = drm_format_info(fourcc); 8488 8489 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 8490 offset = I915_READ(DSPOFFSET(i9xx_plane)); 8491 base = I915_READ(DSPSURF(i9xx_plane)) & 0xfffff000; 8492 } else if (INTEL_GEN(dev_priv) >= 4) { 8493 if (plane_config->tiling) 8494 offset = I915_READ(DSPTILEOFF(i9xx_plane)); 8495 else 8496 offset = I915_READ(DSPLINOFF(i9xx_plane)); 8497 base = I915_READ(DSPSURF(i9xx_plane)) & 0xfffff000; 8498 } else { 8499 base = I915_READ(DSPADDR(i9xx_plane)); 8500 } 8501 plane_config->base = base; 8502 8503 val = I915_READ(PIPESRC(pipe)); 8504 fb->width = ((val >> 16) & 0xfff) + 1; 8505 fb->height = ((val >> 0) & 0xfff) + 1; 8506 8507 val = I915_READ(DSPSTRIDE(i9xx_plane)); 8508 fb->pitches[0] = val & 0xffffffc0; 8509 8510 aligned_height = intel_fb_align_height(fb, 0, fb->height); 8511 8512 plane_config->size = fb->pitches[0] * aligned_height; 8513 8514 DRM_DEBUG_KMS("%s/%s with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", 8515 crtc->base.name, plane->base.name, fb->width, fb->height, 8516 fb->format->cpp[0] * 8, base, fb->pitches[0], 8517 plane_config->size); 8518 8519 plane_config->fb = intel_fb; 8520 } 8521 8522 static void chv_crtc_clock_get(struct intel_crtc *crtc, 8523 struct intel_crtc_state *pipe_config) 8524 { 8525 struct drm_device *dev = crtc->base.dev; 8526 struct drm_i915_private *dev_priv = to_i915(dev); 8527 int pipe = pipe_config->cpu_transcoder; 8528 enum dpio_channel port = vlv_pipe_to_channel(pipe); 8529 struct dpll clock; 8530 u32 cmn_dw13, pll_dw0, pll_dw1, pll_dw2, pll_dw3; 8531 int refclk = 100000; 8532 8533 /* In case of DSI, DPLL will not be used */ 8534 if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0) 8535 return; 8536 8537 vlv_dpio_get(dev_priv); 8538 cmn_dw13 = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW13(port)); 8539 pll_dw0 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW0(port)); 8540 pll_dw1 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW1(port)); 8541 pll_dw2 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW2(port)); 8542 pll_dw3 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW3(port)); 8543 vlv_dpio_put(dev_priv); 8544 8545 clock.m1 = (pll_dw1 & 0x7) == DPIO_CHV_M1_DIV_BY_2 ? 2 : 0; 8546 clock.m2 = (pll_dw0 & 0xff) << 22; 8547 if (pll_dw3 & DPIO_CHV_FRAC_DIV_EN) 8548 clock.m2 |= pll_dw2 & 0x3fffff; 8549 clock.n = (pll_dw1 >> DPIO_CHV_N_DIV_SHIFT) & 0xf; 8550 clock.p1 = (cmn_dw13 >> DPIO_CHV_P1_DIV_SHIFT) & 0x7; 8551 clock.p2 = (cmn_dw13 >> DPIO_CHV_P2_DIV_SHIFT) & 0x1f; 8552 8553 pipe_config->port_clock = chv_calc_dpll_params(refclk, &clock); 8554 } 8555 8556 static void intel_get_crtc_ycbcr_config(struct intel_crtc *crtc, 8557 struct intel_crtc_state *pipe_config) 8558 { 8559 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8560 enum intel_output_format output = INTEL_OUTPUT_FORMAT_RGB; 8561 8562 pipe_config->lspcon_downsampling = false; 8563 8564 if (IS_BROADWELL(dev_priv) || INTEL_GEN(dev_priv) >= 9) { 8565 u32 tmp = I915_READ(PIPEMISC(crtc->pipe)); 8566 8567 if (tmp & PIPEMISC_OUTPUT_COLORSPACE_YUV) { 8568 bool ycbcr420_enabled = tmp & PIPEMISC_YUV420_ENABLE; 8569 bool blend = tmp & PIPEMISC_YUV420_MODE_FULL_BLEND; 8570 8571 if (ycbcr420_enabled) { 8572 /* We support 4:2:0 in full blend mode only */ 8573 if (!blend) 8574 output = INTEL_OUTPUT_FORMAT_INVALID; 8575 else if (!(IS_GEMINILAKE(dev_priv) || 8576 INTEL_GEN(dev_priv) >= 10)) 8577 output = INTEL_OUTPUT_FORMAT_INVALID; 8578 else 8579 output = INTEL_OUTPUT_FORMAT_YCBCR420; 8580 } else { 8581 /* 8582 * Currently there is no interface defined to 8583 * check user preference between RGB/YCBCR444 8584 * or YCBCR420. So the only possible case for 8585 * YCBCR444 usage is driving YCBCR420 output 8586 * with LSPCON, when pipe is configured for 8587 * YCBCR444 output and LSPCON takes care of 8588 * downsampling it. 8589 */ 8590 pipe_config->lspcon_downsampling = true; 8591 output = INTEL_OUTPUT_FORMAT_YCBCR444; 8592 } 8593 } 8594 } 8595 8596 pipe_config->output_format = output; 8597 } 8598 8599 static void i9xx_get_pipe_color_config(struct intel_crtc_state *crtc_state) 8600 { 8601 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 8602 struct intel_plane *plane = to_intel_plane(crtc->base.primary); 8603 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8604 enum i9xx_plane_id i9xx_plane = plane->i9xx_plane; 8605 u32 tmp; 8606 8607 tmp = I915_READ(DSPCNTR(i9xx_plane)); 8608 8609 if (tmp & DISPPLANE_GAMMA_ENABLE) 8610 crtc_state->gamma_enable = true; 8611 8612 if (!HAS_GMCH(dev_priv) && 8613 tmp & DISPPLANE_PIPE_CSC_ENABLE) 8614 crtc_state->csc_enable = true; 8615 } 8616 8617 static bool i9xx_get_pipe_config(struct intel_crtc *crtc, 8618 struct intel_crtc_state *pipe_config) 8619 { 8620 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 8621 enum intel_display_power_domain power_domain; 8622 intel_wakeref_t wakeref; 8623 u32 tmp; 8624 bool ret; 8625 8626 power_domain = POWER_DOMAIN_PIPE(crtc->pipe); 8627 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 8628 if (!wakeref) 8629 return false; 8630 8631 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 8632 pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; 8633 pipe_config->shared_dpll = NULL; 8634 8635 ret = false; 8636 8637 tmp = I915_READ(PIPECONF(crtc->pipe)); 8638 if (!(tmp & PIPECONF_ENABLE)) 8639 goto out; 8640 8641 if (IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) || 8642 IS_CHERRYVIEW(dev_priv)) { 8643 switch (tmp & PIPECONF_BPC_MASK) { 8644 case PIPECONF_6BPC: 8645 pipe_config->pipe_bpp = 18; 8646 break; 8647 case PIPECONF_8BPC: 8648 pipe_config->pipe_bpp = 24; 8649 break; 8650 case PIPECONF_10BPC: 8651 pipe_config->pipe_bpp = 30; 8652 break; 8653 default: 8654 break; 8655 } 8656 } 8657 8658 if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) && 8659 (tmp & PIPECONF_COLOR_RANGE_SELECT)) 8660 pipe_config->limited_color_range = true; 8661 8662 pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_I9XX) >> 8663 PIPECONF_GAMMA_MODE_SHIFT; 8664 8665 if (IS_CHERRYVIEW(dev_priv)) 8666 pipe_config->cgm_mode = I915_READ(CGM_PIPE_MODE(crtc->pipe)); 8667 8668 i9xx_get_pipe_color_config(pipe_config); 8669 intel_color_get_config(pipe_config); 8670 8671 if (INTEL_GEN(dev_priv) < 4) 8672 pipe_config->double_wide = tmp & PIPECONF_DOUBLE_WIDE; 8673 8674 intel_get_pipe_timings(crtc, pipe_config); 8675 intel_get_pipe_src_size(crtc, pipe_config); 8676 8677 i9xx_get_pfit_config(crtc, pipe_config); 8678 8679 if (INTEL_GEN(dev_priv) >= 4) { 8680 /* No way to read it out on pipes B and C */ 8681 if (IS_CHERRYVIEW(dev_priv) && crtc->pipe != PIPE_A) 8682 tmp = dev_priv->chv_dpll_md[crtc->pipe]; 8683 else 8684 tmp = I915_READ(DPLL_MD(crtc->pipe)); 8685 pipe_config->pixel_multiplier = 8686 ((tmp & DPLL_MD_UDI_MULTIPLIER_MASK) 8687 >> DPLL_MD_UDI_MULTIPLIER_SHIFT) + 1; 8688 pipe_config->dpll_hw_state.dpll_md = tmp; 8689 } else if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) || 8690 IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) { 8691 tmp = I915_READ(DPLL(crtc->pipe)); 8692 pipe_config->pixel_multiplier = 8693 ((tmp & SDVO_MULTIPLIER_MASK) 8694 >> SDVO_MULTIPLIER_SHIFT_HIRES) + 1; 8695 } else { 8696 /* Note that on i915G/GM the pixel multiplier is in the sdvo 8697 * port and will be fixed up in the encoder->get_config 8698 * function. */ 8699 pipe_config->pixel_multiplier = 1; 8700 } 8701 pipe_config->dpll_hw_state.dpll = I915_READ(DPLL(crtc->pipe)); 8702 if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) { 8703 pipe_config->dpll_hw_state.fp0 = I915_READ(FP0(crtc->pipe)); 8704 pipe_config->dpll_hw_state.fp1 = I915_READ(FP1(crtc->pipe)); 8705 } else { 8706 /* Mask out read-only status bits. */ 8707 pipe_config->dpll_hw_state.dpll &= ~(DPLL_LOCK_VLV | 8708 DPLL_PORTC_READY_MASK | 8709 DPLL_PORTB_READY_MASK); 8710 } 8711 8712 if (IS_CHERRYVIEW(dev_priv)) 8713 chv_crtc_clock_get(crtc, pipe_config); 8714 else if (IS_VALLEYVIEW(dev_priv)) 8715 vlv_crtc_clock_get(crtc, pipe_config); 8716 else 8717 i9xx_crtc_clock_get(crtc, pipe_config); 8718 8719 /* 8720 * Normally the dotclock is filled in by the encoder .get_config() 8721 * but in case the pipe is enabled w/o any ports we need a sane 8722 * default. 8723 */ 8724 pipe_config->base.adjusted_mode.crtc_clock = 8725 pipe_config->port_clock / pipe_config->pixel_multiplier; 8726 8727 ret = true; 8728 8729 out: 8730 intel_display_power_put(dev_priv, power_domain, wakeref); 8731 8732 return ret; 8733 } 8734 8735 static void ironlake_init_pch_refclk(struct drm_i915_private *dev_priv) 8736 { 8737 struct intel_encoder *encoder; 8738 int i; 8739 u32 val, final; 8740 bool has_lvds = false; 8741 bool has_cpu_edp = false; 8742 bool has_panel = false; 8743 bool has_ck505 = false; 8744 bool can_ssc = false; 8745 bool using_ssc_source = false; 8746 8747 /* We need to take the global config into account */ 8748 for_each_intel_encoder(&dev_priv->drm, encoder) { 8749 switch (encoder->type) { 8750 case INTEL_OUTPUT_LVDS: 8751 has_panel = true; 8752 has_lvds = true; 8753 break; 8754 case INTEL_OUTPUT_EDP: 8755 has_panel = true; 8756 if (encoder->port == PORT_A) 8757 has_cpu_edp = true; 8758 break; 8759 default: 8760 break; 8761 } 8762 } 8763 8764 if (HAS_PCH_IBX(dev_priv)) { 8765 has_ck505 = dev_priv->vbt.display_clock_mode; 8766 can_ssc = has_ck505; 8767 } else { 8768 has_ck505 = false; 8769 can_ssc = true; 8770 } 8771 8772 /* Check if any DPLLs are using the SSC source */ 8773 for (i = 0; i < dev_priv->num_shared_dpll; i++) { 8774 u32 temp = I915_READ(PCH_DPLL(i)); 8775 8776 if (!(temp & DPLL_VCO_ENABLE)) 8777 continue; 8778 8779 if ((temp & PLL_REF_INPUT_MASK) == 8780 PLLB_REF_INPUT_SPREADSPECTRUMIN) { 8781 using_ssc_source = true; 8782 break; 8783 } 8784 } 8785 8786 DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d using_ssc_source %d\n", 8787 has_panel, has_lvds, has_ck505, using_ssc_source); 8788 8789 /* Ironlake: try to setup display ref clock before DPLL 8790 * enabling. This is only under driver's control after 8791 * PCH B stepping, previous chipset stepping should be 8792 * ignoring this setting. 8793 */ 8794 val = I915_READ(PCH_DREF_CONTROL); 8795 8796 /* As we must carefully and slowly disable/enable each source in turn, 8797 * compute the final state we want first and check if we need to 8798 * make any changes at all. 8799 */ 8800 final = val; 8801 final &= ~DREF_NONSPREAD_SOURCE_MASK; 8802 if (has_ck505) 8803 final |= DREF_NONSPREAD_CK505_ENABLE; 8804 else 8805 final |= DREF_NONSPREAD_SOURCE_ENABLE; 8806 8807 final &= ~DREF_SSC_SOURCE_MASK; 8808 final &= ~DREF_CPU_SOURCE_OUTPUT_MASK; 8809 final &= ~DREF_SSC1_ENABLE; 8810 8811 if (has_panel) { 8812 final |= DREF_SSC_SOURCE_ENABLE; 8813 8814 if (intel_panel_use_ssc(dev_priv) && can_ssc) 8815 final |= DREF_SSC1_ENABLE; 8816 8817 if (has_cpu_edp) { 8818 if (intel_panel_use_ssc(dev_priv) && can_ssc) 8819 final |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD; 8820 else 8821 final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; 8822 } else 8823 final |= DREF_CPU_SOURCE_OUTPUT_DISABLE; 8824 } else if (using_ssc_source) { 8825 final |= DREF_SSC_SOURCE_ENABLE; 8826 final |= DREF_SSC1_ENABLE; 8827 } 8828 8829 if (final == val) 8830 return; 8831 8832 /* Always enable nonspread source */ 8833 val &= ~DREF_NONSPREAD_SOURCE_MASK; 8834 8835 if (has_ck505) 8836 val |= DREF_NONSPREAD_CK505_ENABLE; 8837 else 8838 val |= DREF_NONSPREAD_SOURCE_ENABLE; 8839 8840 if (has_panel) { 8841 val &= ~DREF_SSC_SOURCE_MASK; 8842 val |= DREF_SSC_SOURCE_ENABLE; 8843 8844 /* SSC must be turned on before enabling the CPU output */ 8845 if (intel_panel_use_ssc(dev_priv) && can_ssc) { 8846 DRM_DEBUG_KMS("Using SSC on panel\n"); 8847 val |= DREF_SSC1_ENABLE; 8848 } else 8849 val &= ~DREF_SSC1_ENABLE; 8850 8851 /* Get SSC going before enabling the outputs */ 8852 I915_WRITE(PCH_DREF_CONTROL, val); 8853 POSTING_READ(PCH_DREF_CONTROL); 8854 udelay(200); 8855 8856 val &= ~DREF_CPU_SOURCE_OUTPUT_MASK; 8857 8858 /* Enable CPU source on CPU attached eDP */ 8859 if (has_cpu_edp) { 8860 if (intel_panel_use_ssc(dev_priv) && can_ssc) { 8861 DRM_DEBUG_KMS("Using SSC on eDP\n"); 8862 val |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD; 8863 } else 8864 val |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; 8865 } else 8866 val |= DREF_CPU_SOURCE_OUTPUT_DISABLE; 8867 8868 I915_WRITE(PCH_DREF_CONTROL, val); 8869 POSTING_READ(PCH_DREF_CONTROL); 8870 udelay(200); 8871 } else { 8872 DRM_DEBUG_KMS("Disabling CPU source output\n"); 8873 8874 val &= ~DREF_CPU_SOURCE_OUTPUT_MASK; 8875 8876 /* Turn off CPU output */ 8877 val |= DREF_CPU_SOURCE_OUTPUT_DISABLE; 8878 8879 I915_WRITE(PCH_DREF_CONTROL, val); 8880 POSTING_READ(PCH_DREF_CONTROL); 8881 udelay(200); 8882 8883 if (!using_ssc_source) { 8884 DRM_DEBUG_KMS("Disabling SSC source\n"); 8885 8886 /* Turn off the SSC source */ 8887 val &= ~DREF_SSC_SOURCE_MASK; 8888 val |= DREF_SSC_SOURCE_DISABLE; 8889 8890 /* Turn off SSC1 */ 8891 val &= ~DREF_SSC1_ENABLE; 8892 8893 I915_WRITE(PCH_DREF_CONTROL, val); 8894 POSTING_READ(PCH_DREF_CONTROL); 8895 udelay(200); 8896 } 8897 } 8898 8899 BUG_ON(val != final); 8900 } 8901 8902 static void lpt_reset_fdi_mphy(struct drm_i915_private *dev_priv) 8903 { 8904 u32 tmp; 8905 8906 tmp = I915_READ(SOUTH_CHICKEN2); 8907 tmp |= FDI_MPHY_IOSFSB_RESET_CTL; 8908 I915_WRITE(SOUTH_CHICKEN2, tmp); 8909 8910 if (wait_for_us(I915_READ(SOUTH_CHICKEN2) & 8911 FDI_MPHY_IOSFSB_RESET_STATUS, 100)) 8912 DRM_ERROR("FDI mPHY reset assert timeout\n"); 8913 8914 tmp = I915_READ(SOUTH_CHICKEN2); 8915 tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL; 8916 I915_WRITE(SOUTH_CHICKEN2, tmp); 8917 8918 if (wait_for_us((I915_READ(SOUTH_CHICKEN2) & 8919 FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100)) 8920 DRM_ERROR("FDI mPHY reset de-assert timeout\n"); 8921 } 8922 8923 /* WaMPhyProgramming:hsw */ 8924 static void lpt_program_fdi_mphy(struct drm_i915_private *dev_priv) 8925 { 8926 u32 tmp; 8927 8928 tmp = intel_sbi_read(dev_priv, 0x8008, SBI_MPHY); 8929 tmp &= ~(0xFF << 24); 8930 tmp |= (0x12 << 24); 8931 intel_sbi_write(dev_priv, 0x8008, tmp, SBI_MPHY); 8932 8933 tmp = intel_sbi_read(dev_priv, 0x2008, SBI_MPHY); 8934 tmp |= (1 << 11); 8935 intel_sbi_write(dev_priv, 0x2008, tmp, SBI_MPHY); 8936 8937 tmp = intel_sbi_read(dev_priv, 0x2108, SBI_MPHY); 8938 tmp |= (1 << 11); 8939 intel_sbi_write(dev_priv, 0x2108, tmp, SBI_MPHY); 8940 8941 tmp = intel_sbi_read(dev_priv, 0x206C, SBI_MPHY); 8942 tmp |= (1 << 24) | (1 << 21) | (1 << 18); 8943 intel_sbi_write(dev_priv, 0x206C, tmp, SBI_MPHY); 8944 8945 tmp = intel_sbi_read(dev_priv, 0x216C, SBI_MPHY); 8946 tmp |= (1 << 24) | (1 << 21) | (1 << 18); 8947 intel_sbi_write(dev_priv, 0x216C, tmp, SBI_MPHY); 8948 8949 tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY); 8950 tmp &= ~(7 << 13); 8951 tmp |= (5 << 13); 8952 intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY); 8953 8954 tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY); 8955 tmp &= ~(7 << 13); 8956 tmp |= (5 << 13); 8957 intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY); 8958 8959 tmp = intel_sbi_read(dev_priv, 0x208C, SBI_MPHY); 8960 tmp &= ~0xFF; 8961 tmp |= 0x1C; 8962 intel_sbi_write(dev_priv, 0x208C, tmp, SBI_MPHY); 8963 8964 tmp = intel_sbi_read(dev_priv, 0x218C, SBI_MPHY); 8965 tmp &= ~0xFF; 8966 tmp |= 0x1C; 8967 intel_sbi_write(dev_priv, 0x218C, tmp, SBI_MPHY); 8968 8969 tmp = intel_sbi_read(dev_priv, 0x2098, SBI_MPHY); 8970 tmp &= ~(0xFF << 16); 8971 tmp |= (0x1C << 16); 8972 intel_sbi_write(dev_priv, 0x2098, tmp, SBI_MPHY); 8973 8974 tmp = intel_sbi_read(dev_priv, 0x2198, SBI_MPHY); 8975 tmp &= ~(0xFF << 16); 8976 tmp |= (0x1C << 16); 8977 intel_sbi_write(dev_priv, 0x2198, tmp, SBI_MPHY); 8978 8979 tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY); 8980 tmp |= (1 << 27); 8981 intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY); 8982 8983 tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY); 8984 tmp |= (1 << 27); 8985 intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY); 8986 8987 tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY); 8988 tmp &= ~(0xF << 28); 8989 tmp |= (4 << 28); 8990 intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY); 8991 8992 tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY); 8993 tmp &= ~(0xF << 28); 8994 tmp |= (4 << 28); 8995 intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY); 8996 } 8997 8998 /* Implements 3 different sequences from BSpec chapter "Display iCLK 8999 * Programming" based on the parameters passed: 9000 * - Sequence to enable CLKOUT_DP 9001 * - Sequence to enable CLKOUT_DP without spread 9002 * - Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O 9003 */ 9004 static void lpt_enable_clkout_dp(struct drm_i915_private *dev_priv, 9005 bool with_spread, bool with_fdi) 9006 { 9007 u32 reg, tmp; 9008 9009 if (WARN(with_fdi && !with_spread, "FDI requires downspread\n")) 9010 with_spread = true; 9011 if (WARN(HAS_PCH_LPT_LP(dev_priv) && 9012 with_fdi, "LP PCH doesn't have FDI\n")) 9013 with_fdi = false; 9014 9015 mutex_lock(&dev_priv->sb_lock); 9016 9017 tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK); 9018 tmp &= ~SBI_SSCCTL_DISABLE; 9019 tmp |= SBI_SSCCTL_PATHALT; 9020 intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK); 9021 9022 udelay(24); 9023 9024 if (with_spread) { 9025 tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK); 9026 tmp &= ~SBI_SSCCTL_PATHALT; 9027 intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK); 9028 9029 if (with_fdi) { 9030 lpt_reset_fdi_mphy(dev_priv); 9031 lpt_program_fdi_mphy(dev_priv); 9032 } 9033 } 9034 9035 reg = HAS_PCH_LPT_LP(dev_priv) ? SBI_GEN0 : SBI_DBUFF0; 9036 tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK); 9037 tmp |= SBI_GEN0_CFG_BUFFENABLE_DISABLE; 9038 intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK); 9039 9040 mutex_unlock(&dev_priv->sb_lock); 9041 } 9042 9043 /* Sequence to disable CLKOUT_DP */ 9044 void lpt_disable_clkout_dp(struct drm_i915_private *dev_priv) 9045 { 9046 u32 reg, tmp; 9047 9048 mutex_lock(&dev_priv->sb_lock); 9049 9050 reg = HAS_PCH_LPT_LP(dev_priv) ? SBI_GEN0 : SBI_DBUFF0; 9051 tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK); 9052 tmp &= ~SBI_GEN0_CFG_BUFFENABLE_DISABLE; 9053 intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK); 9054 9055 tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK); 9056 if (!(tmp & SBI_SSCCTL_DISABLE)) { 9057 if (!(tmp & SBI_SSCCTL_PATHALT)) { 9058 tmp |= SBI_SSCCTL_PATHALT; 9059 intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK); 9060 udelay(32); 9061 } 9062 tmp |= SBI_SSCCTL_DISABLE; 9063 intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK); 9064 } 9065 9066 mutex_unlock(&dev_priv->sb_lock); 9067 } 9068 9069 #define BEND_IDX(steps) ((50 + (steps)) / 5) 9070 9071 static const u16 sscdivintphase[] = { 9072 [BEND_IDX( 50)] = 0x3B23, 9073 [BEND_IDX( 45)] = 0x3B23, 9074 [BEND_IDX( 40)] = 0x3C23, 9075 [BEND_IDX( 35)] = 0x3C23, 9076 [BEND_IDX( 30)] = 0x3D23, 9077 [BEND_IDX( 25)] = 0x3D23, 9078 [BEND_IDX( 20)] = 0x3E23, 9079 [BEND_IDX( 15)] = 0x3E23, 9080 [BEND_IDX( 10)] = 0x3F23, 9081 [BEND_IDX( 5)] = 0x3F23, 9082 [BEND_IDX( 0)] = 0x0025, 9083 [BEND_IDX( -5)] = 0x0025, 9084 [BEND_IDX(-10)] = 0x0125, 9085 [BEND_IDX(-15)] = 0x0125, 9086 [BEND_IDX(-20)] = 0x0225, 9087 [BEND_IDX(-25)] = 0x0225, 9088 [BEND_IDX(-30)] = 0x0325, 9089 [BEND_IDX(-35)] = 0x0325, 9090 [BEND_IDX(-40)] = 0x0425, 9091 [BEND_IDX(-45)] = 0x0425, 9092 [BEND_IDX(-50)] = 0x0525, 9093 }; 9094 9095 /* 9096 * Bend CLKOUT_DP 9097 * steps -50 to 50 inclusive, in steps of 5 9098 * < 0 slow down the clock, > 0 speed up the clock, 0 == no bend (135MHz) 9099 * change in clock period = -(steps / 10) * 5.787 ps 9100 */ 9101 static void lpt_bend_clkout_dp(struct drm_i915_private *dev_priv, int steps) 9102 { 9103 u32 tmp; 9104 int idx = BEND_IDX(steps); 9105 9106 if (WARN_ON(steps % 5 != 0)) 9107 return; 9108 9109 if (WARN_ON(idx >= ARRAY_SIZE(sscdivintphase))) 9110 return; 9111 9112 mutex_lock(&dev_priv->sb_lock); 9113 9114 if (steps % 10 != 0) 9115 tmp = 0xAAAAAAAB; 9116 else 9117 tmp = 0x00000000; 9118 intel_sbi_write(dev_priv, SBI_SSCDITHPHASE, tmp, SBI_ICLK); 9119 9120 tmp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE, SBI_ICLK); 9121 tmp &= 0xffff0000; 9122 tmp |= sscdivintphase[idx]; 9123 intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE, tmp, SBI_ICLK); 9124 9125 mutex_unlock(&dev_priv->sb_lock); 9126 } 9127 9128 #undef BEND_IDX 9129 9130 static bool spll_uses_pch_ssc(struct drm_i915_private *dev_priv) 9131 { 9132 u32 fuse_strap = I915_READ(FUSE_STRAP); 9133 u32 ctl = I915_READ(SPLL_CTL); 9134 9135 if ((ctl & SPLL_PLL_ENABLE) == 0) 9136 return false; 9137 9138 if ((ctl & SPLL_REF_MASK) == SPLL_REF_MUXED_SSC && 9139 (fuse_strap & HSW_CPU_SSC_ENABLE) == 0) 9140 return true; 9141 9142 if (IS_BROADWELL(dev_priv) && 9143 (ctl & SPLL_REF_MASK) == SPLL_REF_PCH_SSC_BDW) 9144 return true; 9145 9146 return false; 9147 } 9148 9149 static bool wrpll_uses_pch_ssc(struct drm_i915_private *dev_priv, 9150 enum intel_dpll_id id) 9151 { 9152 u32 fuse_strap = I915_READ(FUSE_STRAP); 9153 u32 ctl = I915_READ(WRPLL_CTL(id)); 9154 9155 if ((ctl & WRPLL_PLL_ENABLE) == 0) 9156 return false; 9157 9158 if ((ctl & WRPLL_REF_MASK) == WRPLL_REF_PCH_SSC) 9159 return true; 9160 9161 if ((IS_BROADWELL(dev_priv) || IS_HSW_ULT(dev_priv)) && 9162 (ctl & WRPLL_REF_MASK) == WRPLL_REF_MUXED_SSC_BDW && 9163 (fuse_strap & HSW_CPU_SSC_ENABLE) == 0) 9164 return true; 9165 9166 return false; 9167 } 9168 9169 static void lpt_init_pch_refclk(struct drm_i915_private *dev_priv) 9170 { 9171 struct intel_encoder *encoder; 9172 bool pch_ssc_in_use = false; 9173 bool has_fdi = false; 9174 9175 for_each_intel_encoder(&dev_priv->drm, encoder) { 9176 switch (encoder->type) { 9177 case INTEL_OUTPUT_ANALOG: 9178 has_fdi = true; 9179 break; 9180 default: 9181 break; 9182 } 9183 } 9184 9185 /* 9186 * The BIOS may have decided to use the PCH SSC 9187 * reference so we must not disable it until the 9188 * relevant PLLs have stopped relying on it. We'll 9189 * just leave the PCH SSC reference enabled in case 9190 * any active PLL is using it. It will get disabled 9191 * after runtime suspend if we don't have FDI. 9192 * 9193 * TODO: Move the whole reference clock handling 9194 * to the modeset sequence proper so that we can 9195 * actually enable/disable/reconfigure these things 9196 * safely. To do that we need to introduce a real 9197 * clock hierarchy. That would also allow us to do 9198 * clock bending finally. 9199 */ 9200 if (spll_uses_pch_ssc(dev_priv)) { 9201 DRM_DEBUG_KMS("SPLL using PCH SSC\n"); 9202 pch_ssc_in_use = true; 9203 } 9204 9205 if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL1)) { 9206 DRM_DEBUG_KMS("WRPLL1 using PCH SSC\n"); 9207 pch_ssc_in_use = true; 9208 } 9209 9210 if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL2)) { 9211 DRM_DEBUG_KMS("WRPLL2 using PCH SSC\n"); 9212 pch_ssc_in_use = true; 9213 } 9214 9215 if (pch_ssc_in_use) 9216 return; 9217 9218 if (has_fdi) { 9219 lpt_bend_clkout_dp(dev_priv, 0); 9220 lpt_enable_clkout_dp(dev_priv, true, true); 9221 } else { 9222 lpt_disable_clkout_dp(dev_priv); 9223 } 9224 } 9225 9226 /* 9227 * Initialize reference clocks when the driver loads 9228 */ 9229 void intel_init_pch_refclk(struct drm_i915_private *dev_priv) 9230 { 9231 if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)) 9232 ironlake_init_pch_refclk(dev_priv); 9233 else if (HAS_PCH_LPT(dev_priv)) 9234 lpt_init_pch_refclk(dev_priv); 9235 } 9236 9237 static void ironlake_set_pipeconf(const struct intel_crtc_state *crtc_state) 9238 { 9239 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 9240 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9241 enum pipe pipe = crtc->pipe; 9242 u32 val; 9243 9244 val = 0; 9245 9246 switch (crtc_state->pipe_bpp) { 9247 case 18: 9248 val |= PIPECONF_6BPC; 9249 break; 9250 case 24: 9251 val |= PIPECONF_8BPC; 9252 break; 9253 case 30: 9254 val |= PIPECONF_10BPC; 9255 break; 9256 case 36: 9257 val |= PIPECONF_12BPC; 9258 break; 9259 default: 9260 /* Case prevented by intel_choose_pipe_bpp_dither. */ 9261 BUG(); 9262 } 9263 9264 if (crtc_state->dither) 9265 val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP); 9266 9267 if (crtc_state->base.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 9268 val |= PIPECONF_INTERLACED_ILK; 9269 else 9270 val |= PIPECONF_PROGRESSIVE; 9271 9272 if (crtc_state->limited_color_range) 9273 val |= PIPECONF_COLOR_RANGE_SELECT; 9274 9275 val |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode); 9276 9277 I915_WRITE(PIPECONF(pipe), val); 9278 POSTING_READ(PIPECONF(pipe)); 9279 } 9280 9281 static void haswell_set_pipeconf(const struct intel_crtc_state *crtc_state) 9282 { 9283 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 9284 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9285 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 9286 u32 val = 0; 9287 9288 if (IS_HASWELL(dev_priv) && crtc_state->dither) 9289 val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP); 9290 9291 if (crtc_state->base.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 9292 val |= PIPECONF_INTERLACED_ILK; 9293 else 9294 val |= PIPECONF_PROGRESSIVE; 9295 9296 I915_WRITE(PIPECONF(cpu_transcoder), val); 9297 POSTING_READ(PIPECONF(cpu_transcoder)); 9298 } 9299 9300 static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state) 9301 { 9302 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 9303 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9304 u32 val = 0; 9305 9306 switch (crtc_state->pipe_bpp) { 9307 case 18: 9308 val |= PIPEMISC_DITHER_6_BPC; 9309 break; 9310 case 24: 9311 val |= PIPEMISC_DITHER_8_BPC; 9312 break; 9313 case 30: 9314 val |= PIPEMISC_DITHER_10_BPC; 9315 break; 9316 case 36: 9317 val |= PIPEMISC_DITHER_12_BPC; 9318 break; 9319 default: 9320 MISSING_CASE(crtc_state->pipe_bpp); 9321 break; 9322 } 9323 9324 if (crtc_state->dither) 9325 val |= PIPEMISC_DITHER_ENABLE | PIPEMISC_DITHER_TYPE_SP; 9326 9327 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 || 9328 crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) 9329 val |= PIPEMISC_OUTPUT_COLORSPACE_YUV; 9330 9331 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) 9332 val |= PIPEMISC_YUV420_ENABLE | 9333 PIPEMISC_YUV420_MODE_FULL_BLEND; 9334 9335 if (INTEL_GEN(dev_priv) >= 11 && 9336 (crtc_state->active_planes & ~(icl_hdr_plane_mask() | 9337 BIT(PLANE_CURSOR))) == 0) 9338 val |= PIPEMISC_HDR_MODE_PRECISION; 9339 9340 I915_WRITE(PIPEMISC(crtc->pipe), val); 9341 } 9342 9343 int bdw_get_pipemisc_bpp(struct intel_crtc *crtc) 9344 { 9345 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9346 u32 tmp; 9347 9348 tmp = I915_READ(PIPEMISC(crtc->pipe)); 9349 9350 switch (tmp & PIPEMISC_DITHER_BPC_MASK) { 9351 case PIPEMISC_DITHER_6_BPC: 9352 return 18; 9353 case PIPEMISC_DITHER_8_BPC: 9354 return 24; 9355 case PIPEMISC_DITHER_10_BPC: 9356 return 30; 9357 case PIPEMISC_DITHER_12_BPC: 9358 return 36; 9359 default: 9360 MISSING_CASE(tmp); 9361 return 0; 9362 } 9363 } 9364 9365 int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp) 9366 { 9367 /* 9368 * Account for spread spectrum to avoid 9369 * oversubscribing the link. Max center spread 9370 * is 2.5%; use 5% for safety's sake. 9371 */ 9372 u32 bps = target_clock * bpp * 21 / 20; 9373 return DIV_ROUND_UP(bps, link_bw * 8); 9374 } 9375 9376 static bool ironlake_needs_fb_cb_tune(struct dpll *dpll, int factor) 9377 { 9378 return i9xx_dpll_compute_m(dpll) < factor * dpll->n; 9379 } 9380 9381 static void ironlake_compute_dpll(struct intel_crtc *crtc, 9382 struct intel_crtc_state *crtc_state, 9383 struct dpll *reduced_clock) 9384 { 9385 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9386 u32 dpll, fp, fp2; 9387 int factor; 9388 9389 /* Enable autotuning of the PLL clock (if permissible) */ 9390 factor = 21; 9391 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 9392 if ((intel_panel_use_ssc(dev_priv) && 9393 dev_priv->vbt.lvds_ssc_freq == 100000) || 9394 (HAS_PCH_IBX(dev_priv) && 9395 intel_is_dual_link_lvds(dev_priv))) 9396 factor = 25; 9397 } else if (crtc_state->sdvo_tv_clock) { 9398 factor = 20; 9399 } 9400 9401 fp = i9xx_dpll_compute_fp(&crtc_state->dpll); 9402 9403 if (ironlake_needs_fb_cb_tune(&crtc_state->dpll, factor)) 9404 fp |= FP_CB_TUNE; 9405 9406 if (reduced_clock) { 9407 fp2 = i9xx_dpll_compute_fp(reduced_clock); 9408 9409 if (reduced_clock->m < factor * reduced_clock->n) 9410 fp2 |= FP_CB_TUNE; 9411 } else { 9412 fp2 = fp; 9413 } 9414 9415 dpll = 0; 9416 9417 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) 9418 dpll |= DPLLB_MODE_LVDS; 9419 else 9420 dpll |= DPLLB_MODE_DAC_SERIAL; 9421 9422 dpll |= (crtc_state->pixel_multiplier - 1) 9423 << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT; 9424 9425 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO) || 9426 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) 9427 dpll |= DPLL_SDVO_HIGH_SPEED; 9428 9429 if (intel_crtc_has_dp_encoder(crtc_state)) 9430 dpll |= DPLL_SDVO_HIGH_SPEED; 9431 9432 /* 9433 * The high speed IO clock is only really required for 9434 * SDVO/HDMI/DP, but we also enable it for CRT to make it 9435 * possible to share the DPLL between CRT and HDMI. Enabling 9436 * the clock needlessly does no real harm, except use up a 9437 * bit of power potentially. 9438 * 9439 * We'll limit this to IVB with 3 pipes, since it has only two 9440 * DPLLs and so DPLL sharing is the only way to get three pipes 9441 * driving PCH ports at the same time. On SNB we could do this, 9442 * and potentially avoid enabling the second DPLL, but it's not 9443 * clear if it''s a win or loss power wise. No point in doing 9444 * this on ILK at all since it has a fixed DPLL<->pipe mapping. 9445 */ 9446 if (INTEL_INFO(dev_priv)->num_pipes == 3 && 9447 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) 9448 dpll |= DPLL_SDVO_HIGH_SPEED; 9449 9450 /* compute bitmask from p1 value */ 9451 dpll |= (1 << (crtc_state->dpll.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; 9452 /* also FPA1 */ 9453 dpll |= (1 << (crtc_state->dpll.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; 9454 9455 switch (crtc_state->dpll.p2) { 9456 case 5: 9457 dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5; 9458 break; 9459 case 7: 9460 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7; 9461 break; 9462 case 10: 9463 dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10; 9464 break; 9465 case 14: 9466 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; 9467 break; 9468 } 9469 9470 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) && 9471 intel_panel_use_ssc(dev_priv)) 9472 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; 9473 else 9474 dpll |= PLL_REF_INPUT_DREFCLK; 9475 9476 dpll |= DPLL_VCO_ENABLE; 9477 9478 crtc_state->dpll_hw_state.dpll = dpll; 9479 crtc_state->dpll_hw_state.fp0 = fp; 9480 crtc_state->dpll_hw_state.fp1 = fp2; 9481 } 9482 9483 static int ironlake_crtc_compute_clock(struct intel_crtc *crtc, 9484 struct intel_crtc_state *crtc_state) 9485 { 9486 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9487 const struct intel_limit *limit; 9488 int refclk = 120000; 9489 9490 memset(&crtc_state->dpll_hw_state, 0, 9491 sizeof(crtc_state->dpll_hw_state)); 9492 9493 /* CPU eDP is the only output that doesn't need a PCH PLL of its own. */ 9494 if (!crtc_state->has_pch_encoder) 9495 return 0; 9496 9497 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) { 9498 if (intel_panel_use_ssc(dev_priv)) { 9499 DRM_DEBUG_KMS("using SSC reference clock of %d kHz\n", 9500 dev_priv->vbt.lvds_ssc_freq); 9501 refclk = dev_priv->vbt.lvds_ssc_freq; 9502 } 9503 9504 if (intel_is_dual_link_lvds(dev_priv)) { 9505 if (refclk == 100000) 9506 limit = &intel_limits_ironlake_dual_lvds_100m; 9507 else 9508 limit = &intel_limits_ironlake_dual_lvds; 9509 } else { 9510 if (refclk == 100000) 9511 limit = &intel_limits_ironlake_single_lvds_100m; 9512 else 9513 limit = &intel_limits_ironlake_single_lvds; 9514 } 9515 } else { 9516 limit = &intel_limits_ironlake_dac; 9517 } 9518 9519 if (!crtc_state->clock_set && 9520 !g4x_find_best_dpll(limit, crtc_state, crtc_state->port_clock, 9521 refclk, NULL, &crtc_state->dpll)) { 9522 DRM_ERROR("Couldn't find PLL settings for mode!\n"); 9523 return -EINVAL; 9524 } 9525 9526 ironlake_compute_dpll(crtc, crtc_state, NULL); 9527 9528 if (!intel_get_shared_dpll(crtc_state, NULL)) { 9529 DRM_DEBUG_KMS("failed to find PLL for pipe %c\n", 9530 pipe_name(crtc->pipe)); 9531 return -EINVAL; 9532 } 9533 9534 return 0; 9535 } 9536 9537 static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc, 9538 struct intel_link_m_n *m_n) 9539 { 9540 struct drm_device *dev = crtc->base.dev; 9541 struct drm_i915_private *dev_priv = to_i915(dev); 9542 enum pipe pipe = crtc->pipe; 9543 9544 m_n->link_m = I915_READ(PCH_TRANS_LINK_M1(pipe)); 9545 m_n->link_n = I915_READ(PCH_TRANS_LINK_N1(pipe)); 9546 m_n->gmch_m = I915_READ(PCH_TRANS_DATA_M1(pipe)) 9547 & ~TU_SIZE_MASK; 9548 m_n->gmch_n = I915_READ(PCH_TRANS_DATA_N1(pipe)); 9549 m_n->tu = ((I915_READ(PCH_TRANS_DATA_M1(pipe)) 9550 & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1; 9551 } 9552 9553 static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc, 9554 enum transcoder transcoder, 9555 struct intel_link_m_n *m_n, 9556 struct intel_link_m_n *m2_n2) 9557 { 9558 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9559 enum pipe pipe = crtc->pipe; 9560 9561 if (INTEL_GEN(dev_priv) >= 5) { 9562 m_n->link_m = I915_READ(PIPE_LINK_M1(transcoder)); 9563 m_n->link_n = I915_READ(PIPE_LINK_N1(transcoder)); 9564 m_n->gmch_m = I915_READ(PIPE_DATA_M1(transcoder)) 9565 & ~TU_SIZE_MASK; 9566 m_n->gmch_n = I915_READ(PIPE_DATA_N1(transcoder)); 9567 m_n->tu = ((I915_READ(PIPE_DATA_M1(transcoder)) 9568 & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1; 9569 9570 if (m2_n2 && transcoder_has_m2_n2(dev_priv, transcoder)) { 9571 m2_n2->link_m = I915_READ(PIPE_LINK_M2(transcoder)); 9572 m2_n2->link_n = I915_READ(PIPE_LINK_N2(transcoder)); 9573 m2_n2->gmch_m = I915_READ(PIPE_DATA_M2(transcoder)) 9574 & ~TU_SIZE_MASK; 9575 m2_n2->gmch_n = I915_READ(PIPE_DATA_N2(transcoder)); 9576 m2_n2->tu = ((I915_READ(PIPE_DATA_M2(transcoder)) 9577 & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1; 9578 } 9579 } else { 9580 m_n->link_m = I915_READ(PIPE_LINK_M_G4X(pipe)); 9581 m_n->link_n = I915_READ(PIPE_LINK_N_G4X(pipe)); 9582 m_n->gmch_m = I915_READ(PIPE_DATA_M_G4X(pipe)) 9583 & ~TU_SIZE_MASK; 9584 m_n->gmch_n = I915_READ(PIPE_DATA_N_G4X(pipe)); 9585 m_n->tu = ((I915_READ(PIPE_DATA_M_G4X(pipe)) 9586 & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1; 9587 } 9588 } 9589 9590 void intel_dp_get_m_n(struct intel_crtc *crtc, 9591 struct intel_crtc_state *pipe_config) 9592 { 9593 if (pipe_config->has_pch_encoder) 9594 intel_pch_transcoder_get_m_n(crtc, &pipe_config->dp_m_n); 9595 else 9596 intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder, 9597 &pipe_config->dp_m_n, 9598 &pipe_config->dp_m2_n2); 9599 } 9600 9601 static void ironlake_get_fdi_m_n_config(struct intel_crtc *crtc, 9602 struct intel_crtc_state *pipe_config) 9603 { 9604 intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder, 9605 &pipe_config->fdi_m_n, NULL); 9606 } 9607 9608 static void skylake_get_pfit_config(struct intel_crtc *crtc, 9609 struct intel_crtc_state *pipe_config) 9610 { 9611 struct drm_device *dev = crtc->base.dev; 9612 struct drm_i915_private *dev_priv = to_i915(dev); 9613 struct intel_crtc_scaler_state *scaler_state = &pipe_config->scaler_state; 9614 u32 ps_ctrl = 0; 9615 int id = -1; 9616 int i; 9617 9618 /* find scaler attached to this pipe */ 9619 for (i = 0; i < crtc->num_scalers; i++) { 9620 ps_ctrl = I915_READ(SKL_PS_CTRL(crtc->pipe, i)); 9621 if (ps_ctrl & PS_SCALER_EN && !(ps_ctrl & PS_PLANE_SEL_MASK)) { 9622 id = i; 9623 pipe_config->pch_pfit.enabled = true; 9624 pipe_config->pch_pfit.pos = I915_READ(SKL_PS_WIN_POS(crtc->pipe, i)); 9625 pipe_config->pch_pfit.size = I915_READ(SKL_PS_WIN_SZ(crtc->pipe, i)); 9626 scaler_state->scalers[i].in_use = true; 9627 break; 9628 } 9629 } 9630 9631 scaler_state->scaler_id = id; 9632 if (id >= 0) { 9633 scaler_state->scaler_users |= (1 << SKL_CRTC_INDEX); 9634 } else { 9635 scaler_state->scaler_users &= ~(1 << SKL_CRTC_INDEX); 9636 } 9637 } 9638 9639 static void 9640 skylake_get_initial_plane_config(struct intel_crtc *crtc, 9641 struct intel_initial_plane_config *plane_config) 9642 { 9643 struct drm_device *dev = crtc->base.dev; 9644 struct drm_i915_private *dev_priv = to_i915(dev); 9645 struct intel_plane *plane = to_intel_plane(crtc->base.primary); 9646 enum plane_id plane_id = plane->id; 9647 enum pipe pipe; 9648 u32 val, base, offset, stride_mult, tiling, alpha; 9649 int fourcc, pixel_format; 9650 unsigned int aligned_height; 9651 struct drm_framebuffer *fb; 9652 struct intel_framebuffer *intel_fb; 9653 9654 if (!plane->get_hw_state(plane, &pipe)) 9655 return; 9656 9657 WARN_ON(pipe != crtc->pipe); 9658 9659 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); 9660 if (!intel_fb) { 9661 DRM_DEBUG_KMS("failed to alloc fb\n"); 9662 return; 9663 } 9664 9665 fb = &intel_fb->base; 9666 9667 fb->dev = dev; 9668 9669 val = I915_READ(PLANE_CTL(pipe, plane_id)); 9670 9671 if (INTEL_GEN(dev_priv) >= 11) 9672 pixel_format = val & ICL_PLANE_CTL_FORMAT_MASK; 9673 else 9674 pixel_format = val & PLANE_CTL_FORMAT_MASK; 9675 9676 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) { 9677 alpha = I915_READ(PLANE_COLOR_CTL(pipe, plane_id)); 9678 alpha &= PLANE_COLOR_ALPHA_MASK; 9679 } else { 9680 alpha = val & PLANE_CTL_ALPHA_MASK; 9681 } 9682 9683 fourcc = skl_format_to_fourcc(pixel_format, 9684 val & PLANE_CTL_ORDER_RGBX, alpha); 9685 fb->format = drm_format_info(fourcc); 9686 9687 tiling = val & PLANE_CTL_TILED_MASK; 9688 switch (tiling) { 9689 case PLANE_CTL_TILED_LINEAR: 9690 fb->modifier = DRM_FORMAT_MOD_LINEAR; 9691 break; 9692 case PLANE_CTL_TILED_X: 9693 plane_config->tiling = I915_TILING_X; 9694 fb->modifier = I915_FORMAT_MOD_X_TILED; 9695 break; 9696 case PLANE_CTL_TILED_Y: 9697 plane_config->tiling = I915_TILING_Y; 9698 if (val & PLANE_CTL_RENDER_DECOMPRESSION_ENABLE) 9699 fb->modifier = I915_FORMAT_MOD_Y_TILED_CCS; 9700 else 9701 fb->modifier = I915_FORMAT_MOD_Y_TILED; 9702 break; 9703 case PLANE_CTL_TILED_YF: 9704 if (val & PLANE_CTL_RENDER_DECOMPRESSION_ENABLE) 9705 fb->modifier = I915_FORMAT_MOD_Yf_TILED_CCS; 9706 else 9707 fb->modifier = I915_FORMAT_MOD_Yf_TILED; 9708 break; 9709 default: 9710 MISSING_CASE(tiling); 9711 goto error; 9712 } 9713 9714 /* 9715 * DRM_MODE_ROTATE_ is counter clockwise to stay compatible with Xrandr 9716 * while i915 HW rotation is clockwise, thats why this swapping. 9717 */ 9718 switch (val & PLANE_CTL_ROTATE_MASK) { 9719 case PLANE_CTL_ROTATE_0: 9720 plane_config->rotation = DRM_MODE_ROTATE_0; 9721 break; 9722 case PLANE_CTL_ROTATE_90: 9723 plane_config->rotation = DRM_MODE_ROTATE_270; 9724 break; 9725 case PLANE_CTL_ROTATE_180: 9726 plane_config->rotation = DRM_MODE_ROTATE_180; 9727 break; 9728 case PLANE_CTL_ROTATE_270: 9729 plane_config->rotation = DRM_MODE_ROTATE_90; 9730 break; 9731 } 9732 9733 if (INTEL_GEN(dev_priv) >= 10 && 9734 val & PLANE_CTL_FLIP_HORIZONTAL) 9735 plane_config->rotation |= DRM_MODE_REFLECT_X; 9736 9737 base = I915_READ(PLANE_SURF(pipe, plane_id)) & 0xfffff000; 9738 plane_config->base = base; 9739 9740 offset = I915_READ(PLANE_OFFSET(pipe, plane_id)); 9741 9742 val = I915_READ(PLANE_SIZE(pipe, plane_id)); 9743 fb->height = ((val >> 16) & 0xfff) + 1; 9744 fb->width = ((val >> 0) & 0x1fff) + 1; 9745 9746 val = I915_READ(PLANE_STRIDE(pipe, plane_id)); 9747 stride_mult = skl_plane_stride_mult(fb, 0, DRM_MODE_ROTATE_0); 9748 fb->pitches[0] = (val & 0x3ff) * stride_mult; 9749 9750 aligned_height = intel_fb_align_height(fb, 0, fb->height); 9751 9752 plane_config->size = fb->pitches[0] * aligned_height; 9753 9754 DRM_DEBUG_KMS("%s/%s with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", 9755 crtc->base.name, plane->base.name, fb->width, fb->height, 9756 fb->format->cpp[0] * 8, base, fb->pitches[0], 9757 plane_config->size); 9758 9759 plane_config->fb = intel_fb; 9760 return; 9761 9762 error: 9763 kfree(intel_fb); 9764 } 9765 9766 static void ironlake_get_pfit_config(struct intel_crtc *crtc, 9767 struct intel_crtc_state *pipe_config) 9768 { 9769 struct drm_device *dev = crtc->base.dev; 9770 struct drm_i915_private *dev_priv = to_i915(dev); 9771 u32 tmp; 9772 9773 tmp = I915_READ(PF_CTL(crtc->pipe)); 9774 9775 if (tmp & PF_ENABLE) { 9776 pipe_config->pch_pfit.enabled = true; 9777 pipe_config->pch_pfit.pos = I915_READ(PF_WIN_POS(crtc->pipe)); 9778 pipe_config->pch_pfit.size = I915_READ(PF_WIN_SZ(crtc->pipe)); 9779 9780 /* We currently do not free assignements of panel fitters on 9781 * ivb/hsw (since we don't use the higher upscaling modes which 9782 * differentiates them) so just WARN about this case for now. */ 9783 if (IS_GEN(dev_priv, 7)) { 9784 WARN_ON((tmp & PF_PIPE_SEL_MASK_IVB) != 9785 PF_PIPE_SEL_IVB(crtc->pipe)); 9786 } 9787 } 9788 } 9789 9790 static bool ironlake_get_pipe_config(struct intel_crtc *crtc, 9791 struct intel_crtc_state *pipe_config) 9792 { 9793 struct drm_device *dev = crtc->base.dev; 9794 struct drm_i915_private *dev_priv = to_i915(dev); 9795 enum intel_display_power_domain power_domain; 9796 intel_wakeref_t wakeref; 9797 u32 tmp; 9798 bool ret; 9799 9800 power_domain = POWER_DOMAIN_PIPE(crtc->pipe); 9801 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 9802 if (!wakeref) 9803 return false; 9804 9805 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 9806 pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; 9807 pipe_config->shared_dpll = NULL; 9808 9809 ret = false; 9810 tmp = I915_READ(PIPECONF(crtc->pipe)); 9811 if (!(tmp & PIPECONF_ENABLE)) 9812 goto out; 9813 9814 switch (tmp & PIPECONF_BPC_MASK) { 9815 case PIPECONF_6BPC: 9816 pipe_config->pipe_bpp = 18; 9817 break; 9818 case PIPECONF_8BPC: 9819 pipe_config->pipe_bpp = 24; 9820 break; 9821 case PIPECONF_10BPC: 9822 pipe_config->pipe_bpp = 30; 9823 break; 9824 case PIPECONF_12BPC: 9825 pipe_config->pipe_bpp = 36; 9826 break; 9827 default: 9828 break; 9829 } 9830 9831 if (tmp & PIPECONF_COLOR_RANGE_SELECT) 9832 pipe_config->limited_color_range = true; 9833 9834 pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_ILK) >> 9835 PIPECONF_GAMMA_MODE_SHIFT; 9836 9837 pipe_config->csc_mode = I915_READ(PIPE_CSC_MODE(crtc->pipe)); 9838 9839 i9xx_get_pipe_color_config(pipe_config); 9840 intel_color_get_config(pipe_config); 9841 9842 if (I915_READ(PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) { 9843 struct intel_shared_dpll *pll; 9844 enum intel_dpll_id pll_id; 9845 9846 pipe_config->has_pch_encoder = true; 9847 9848 tmp = I915_READ(FDI_RX_CTL(crtc->pipe)); 9849 pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >> 9850 FDI_DP_PORT_WIDTH_SHIFT) + 1; 9851 9852 ironlake_get_fdi_m_n_config(crtc, pipe_config); 9853 9854 if (HAS_PCH_IBX(dev_priv)) { 9855 /* 9856 * The pipe->pch transcoder and pch transcoder->pll 9857 * mapping is fixed. 9858 */ 9859 pll_id = (enum intel_dpll_id) crtc->pipe; 9860 } else { 9861 tmp = I915_READ(PCH_DPLL_SEL); 9862 if (tmp & TRANS_DPLLB_SEL(crtc->pipe)) 9863 pll_id = DPLL_ID_PCH_PLL_B; 9864 else 9865 pll_id= DPLL_ID_PCH_PLL_A; 9866 } 9867 9868 pipe_config->shared_dpll = 9869 intel_get_shared_dpll_by_id(dev_priv, pll_id); 9870 pll = pipe_config->shared_dpll; 9871 9872 WARN_ON(!pll->info->funcs->get_hw_state(dev_priv, pll, 9873 &pipe_config->dpll_hw_state)); 9874 9875 tmp = pipe_config->dpll_hw_state.dpll; 9876 pipe_config->pixel_multiplier = 9877 ((tmp & PLL_REF_SDVO_HDMI_MULTIPLIER_MASK) 9878 >> PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT) + 1; 9879 9880 ironlake_pch_clock_get(crtc, pipe_config); 9881 } else { 9882 pipe_config->pixel_multiplier = 1; 9883 } 9884 9885 intel_get_pipe_timings(crtc, pipe_config); 9886 intel_get_pipe_src_size(crtc, pipe_config); 9887 9888 ironlake_get_pfit_config(crtc, pipe_config); 9889 9890 ret = true; 9891 9892 out: 9893 intel_display_power_put(dev_priv, power_domain, wakeref); 9894 9895 return ret; 9896 } 9897 static int haswell_crtc_compute_clock(struct intel_crtc *crtc, 9898 struct intel_crtc_state *crtc_state) 9899 { 9900 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 9901 struct intel_atomic_state *state = 9902 to_intel_atomic_state(crtc_state->base.state); 9903 9904 if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) || 9905 INTEL_GEN(dev_priv) >= 11) { 9906 struct intel_encoder *encoder = 9907 intel_get_crtc_new_encoder(state, crtc_state); 9908 9909 if (!intel_get_shared_dpll(crtc_state, encoder)) { 9910 DRM_DEBUG_KMS("failed to find PLL for pipe %c\n", 9911 pipe_name(crtc->pipe)); 9912 return -EINVAL; 9913 } 9914 } 9915 9916 return 0; 9917 } 9918 9919 static void cannonlake_get_ddi_pll(struct drm_i915_private *dev_priv, 9920 enum port port, 9921 struct intel_crtc_state *pipe_config) 9922 { 9923 enum intel_dpll_id id; 9924 u32 temp; 9925 9926 temp = I915_READ(DPCLKA_CFGCR0) & DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); 9927 id = temp >> DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port); 9928 9929 if (WARN_ON(id < SKL_DPLL0 || id > SKL_DPLL2)) 9930 return; 9931 9932 pipe_config->shared_dpll = intel_get_shared_dpll_by_id(dev_priv, id); 9933 } 9934 9935 static void icelake_get_ddi_pll(struct drm_i915_private *dev_priv, 9936 enum port port, 9937 struct intel_crtc_state *pipe_config) 9938 { 9939 enum intel_dpll_id id; 9940 u32 temp; 9941 9942 /* TODO: TBT pll not implemented. */ 9943 if (intel_port_is_combophy(dev_priv, port)) { 9944 temp = I915_READ(DPCLKA_CFGCR0_ICL) & 9945 DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); 9946 id = temp >> DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port); 9947 } else if (intel_port_is_tc(dev_priv, port)) { 9948 id = icl_tc_port_to_pll_id(intel_port_to_tc(dev_priv, port)); 9949 } else { 9950 WARN(1, "Invalid port %x\n", port); 9951 return; 9952 } 9953 9954 pipe_config->shared_dpll = intel_get_shared_dpll_by_id(dev_priv, id); 9955 } 9956 9957 static void bxt_get_ddi_pll(struct drm_i915_private *dev_priv, 9958 enum port port, 9959 struct intel_crtc_state *pipe_config) 9960 { 9961 enum intel_dpll_id id; 9962 9963 switch (port) { 9964 case PORT_A: 9965 id = DPLL_ID_SKL_DPLL0; 9966 break; 9967 case PORT_B: 9968 id = DPLL_ID_SKL_DPLL1; 9969 break; 9970 case PORT_C: 9971 id = DPLL_ID_SKL_DPLL2; 9972 break; 9973 default: 9974 DRM_ERROR("Incorrect port type\n"); 9975 return; 9976 } 9977 9978 pipe_config->shared_dpll = intel_get_shared_dpll_by_id(dev_priv, id); 9979 } 9980 9981 static void skylake_get_ddi_pll(struct drm_i915_private *dev_priv, 9982 enum port port, 9983 struct intel_crtc_state *pipe_config) 9984 { 9985 enum intel_dpll_id id; 9986 u32 temp; 9987 9988 temp = I915_READ(DPLL_CTRL2) & DPLL_CTRL2_DDI_CLK_SEL_MASK(port); 9989 id = temp >> (port * 3 + 1); 9990 9991 if (WARN_ON(id < SKL_DPLL0 || id > SKL_DPLL3)) 9992 return; 9993 9994 pipe_config->shared_dpll = intel_get_shared_dpll_by_id(dev_priv, id); 9995 } 9996 9997 static void haswell_get_ddi_pll(struct drm_i915_private *dev_priv, 9998 enum port port, 9999 struct intel_crtc_state *pipe_config) 10000 { 10001 enum intel_dpll_id id; 10002 u32 ddi_pll_sel = I915_READ(PORT_CLK_SEL(port)); 10003 10004 switch (ddi_pll_sel) { 10005 case PORT_CLK_SEL_WRPLL1: 10006 id = DPLL_ID_WRPLL1; 10007 break; 10008 case PORT_CLK_SEL_WRPLL2: 10009 id = DPLL_ID_WRPLL2; 10010 break; 10011 case PORT_CLK_SEL_SPLL: 10012 id = DPLL_ID_SPLL; 10013 break; 10014 case PORT_CLK_SEL_LCPLL_810: 10015 id = DPLL_ID_LCPLL_810; 10016 break; 10017 case PORT_CLK_SEL_LCPLL_1350: 10018 id = DPLL_ID_LCPLL_1350; 10019 break; 10020 case PORT_CLK_SEL_LCPLL_2700: 10021 id = DPLL_ID_LCPLL_2700; 10022 break; 10023 default: 10024 MISSING_CASE(ddi_pll_sel); 10025 /* fall through */ 10026 case PORT_CLK_SEL_NONE: 10027 return; 10028 } 10029 10030 pipe_config->shared_dpll = intel_get_shared_dpll_by_id(dev_priv, id); 10031 } 10032 10033 static bool hsw_get_transcoder_state(struct intel_crtc *crtc, 10034 struct intel_crtc_state *pipe_config, 10035 u64 *power_domain_mask, 10036 intel_wakeref_t *wakerefs) 10037 { 10038 struct drm_device *dev = crtc->base.dev; 10039 struct drm_i915_private *dev_priv = to_i915(dev); 10040 enum intel_display_power_domain power_domain; 10041 unsigned long panel_transcoder_mask = 0; 10042 unsigned long enabled_panel_transcoders = 0; 10043 enum transcoder panel_transcoder; 10044 intel_wakeref_t wf; 10045 u32 tmp; 10046 10047 if (INTEL_GEN(dev_priv) >= 11) 10048 panel_transcoder_mask |= 10049 BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1); 10050 10051 if (HAS_TRANSCODER_EDP(dev_priv)) 10052 panel_transcoder_mask |= BIT(TRANSCODER_EDP); 10053 10054 /* 10055 * The pipe->transcoder mapping is fixed with the exception of the eDP 10056 * and DSI transcoders handled below. 10057 */ 10058 pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; 10059 10060 /* 10061 * XXX: Do intel_display_power_get_if_enabled before reading this (for 10062 * consistency and less surprising code; it's in always on power). 10063 */ 10064 for_each_set_bit(panel_transcoder, 10065 &panel_transcoder_mask, 10066 ARRAY_SIZE(INTEL_INFO(dev_priv)->trans_offsets)) { 10067 bool force_thru = false; 10068 enum pipe trans_pipe; 10069 10070 tmp = I915_READ(TRANS_DDI_FUNC_CTL(panel_transcoder)); 10071 if (!(tmp & TRANS_DDI_FUNC_ENABLE)) 10072 continue; 10073 10074 /* 10075 * Log all enabled ones, only use the first one. 10076 * 10077 * FIXME: This won't work for two separate DSI displays. 10078 */ 10079 enabled_panel_transcoders |= BIT(panel_transcoder); 10080 if (enabled_panel_transcoders != BIT(panel_transcoder)) 10081 continue; 10082 10083 switch (tmp & TRANS_DDI_EDP_INPUT_MASK) { 10084 default: 10085 WARN(1, "unknown pipe linked to transcoder %s\n", 10086 transcoder_name(panel_transcoder)); 10087 /* fall through */ 10088 case TRANS_DDI_EDP_INPUT_A_ONOFF: 10089 force_thru = true; 10090 /* fall through */ 10091 case TRANS_DDI_EDP_INPUT_A_ON: 10092 trans_pipe = PIPE_A; 10093 break; 10094 case TRANS_DDI_EDP_INPUT_B_ONOFF: 10095 trans_pipe = PIPE_B; 10096 break; 10097 case TRANS_DDI_EDP_INPUT_C_ONOFF: 10098 trans_pipe = PIPE_C; 10099 break; 10100 } 10101 10102 if (trans_pipe == crtc->pipe) { 10103 pipe_config->cpu_transcoder = panel_transcoder; 10104 pipe_config->pch_pfit.force_thru = force_thru; 10105 } 10106 } 10107 10108 /* 10109 * Valid combos: none, eDP, DSI0, DSI1, DSI0+DSI1 10110 */ 10111 WARN_ON((enabled_panel_transcoders & BIT(TRANSCODER_EDP)) && 10112 enabled_panel_transcoders != BIT(TRANSCODER_EDP)); 10113 10114 power_domain = POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder); 10115 WARN_ON(*power_domain_mask & BIT_ULL(power_domain)); 10116 10117 wf = intel_display_power_get_if_enabled(dev_priv, power_domain); 10118 if (!wf) 10119 return false; 10120 10121 wakerefs[power_domain] = wf; 10122 *power_domain_mask |= BIT_ULL(power_domain); 10123 10124 tmp = I915_READ(PIPECONF(pipe_config->cpu_transcoder)); 10125 10126 return tmp & PIPECONF_ENABLE; 10127 } 10128 10129 static bool bxt_get_dsi_transcoder_state(struct intel_crtc *crtc, 10130 struct intel_crtc_state *pipe_config, 10131 u64 *power_domain_mask, 10132 intel_wakeref_t *wakerefs) 10133 { 10134 struct drm_device *dev = crtc->base.dev; 10135 struct drm_i915_private *dev_priv = to_i915(dev); 10136 enum intel_display_power_domain power_domain; 10137 enum transcoder cpu_transcoder; 10138 intel_wakeref_t wf; 10139 enum port port; 10140 u32 tmp; 10141 10142 for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) { 10143 if (port == PORT_A) 10144 cpu_transcoder = TRANSCODER_DSI_A; 10145 else 10146 cpu_transcoder = TRANSCODER_DSI_C; 10147 10148 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); 10149 WARN_ON(*power_domain_mask & BIT_ULL(power_domain)); 10150 10151 wf = intel_display_power_get_if_enabled(dev_priv, power_domain); 10152 if (!wf) 10153 continue; 10154 10155 wakerefs[power_domain] = wf; 10156 *power_domain_mask |= BIT_ULL(power_domain); 10157 10158 /* 10159 * The PLL needs to be enabled with a valid divider 10160 * configuration, otherwise accessing DSI registers will hang 10161 * the machine. See BSpec North Display Engine 10162 * registers/MIPI[BXT]. We can break out here early, since we 10163 * need the same DSI PLL to be enabled for both DSI ports. 10164 */ 10165 if (!bxt_dsi_pll_is_enabled(dev_priv)) 10166 break; 10167 10168 /* XXX: this works for video mode only */ 10169 tmp = I915_READ(BXT_MIPI_PORT_CTRL(port)); 10170 if (!(tmp & DPI_ENABLE)) 10171 continue; 10172 10173 tmp = I915_READ(MIPI_CTRL(port)); 10174 if ((tmp & BXT_PIPE_SELECT_MASK) != BXT_PIPE_SELECT(crtc->pipe)) 10175 continue; 10176 10177 pipe_config->cpu_transcoder = cpu_transcoder; 10178 break; 10179 } 10180 10181 return transcoder_is_dsi(pipe_config->cpu_transcoder); 10182 } 10183 10184 static void haswell_get_ddi_port_state(struct intel_crtc *crtc, 10185 struct intel_crtc_state *pipe_config) 10186 { 10187 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 10188 struct intel_shared_dpll *pll; 10189 enum port port; 10190 u32 tmp; 10191 10192 tmp = I915_READ(TRANS_DDI_FUNC_CTL(pipe_config->cpu_transcoder)); 10193 10194 port = (tmp & TRANS_DDI_PORT_MASK) >> TRANS_DDI_PORT_SHIFT; 10195 10196 if (INTEL_GEN(dev_priv) >= 11) 10197 icelake_get_ddi_pll(dev_priv, port, pipe_config); 10198 else if (IS_CANNONLAKE(dev_priv)) 10199 cannonlake_get_ddi_pll(dev_priv, port, pipe_config); 10200 else if (IS_GEN9_BC(dev_priv)) 10201 skylake_get_ddi_pll(dev_priv, port, pipe_config); 10202 else if (IS_GEN9_LP(dev_priv)) 10203 bxt_get_ddi_pll(dev_priv, port, pipe_config); 10204 else 10205 haswell_get_ddi_pll(dev_priv, port, pipe_config); 10206 10207 pll = pipe_config->shared_dpll; 10208 if (pll) { 10209 WARN_ON(!pll->info->funcs->get_hw_state(dev_priv, pll, 10210 &pipe_config->dpll_hw_state)); 10211 } 10212 10213 /* 10214 * Haswell has only FDI/PCH transcoder A. It is which is connected to 10215 * DDI E. So just check whether this pipe is wired to DDI E and whether 10216 * the PCH transcoder is on. 10217 */ 10218 if (INTEL_GEN(dev_priv) < 9 && 10219 (port == PORT_E) && I915_READ(LPT_TRANSCONF) & TRANS_ENABLE) { 10220 pipe_config->has_pch_encoder = true; 10221 10222 tmp = I915_READ(FDI_RX_CTL(PIPE_A)); 10223 pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >> 10224 FDI_DP_PORT_WIDTH_SHIFT) + 1; 10225 10226 ironlake_get_fdi_m_n_config(crtc, pipe_config); 10227 } 10228 } 10229 10230 static bool haswell_get_pipe_config(struct intel_crtc *crtc, 10231 struct intel_crtc_state *pipe_config) 10232 { 10233 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 10234 intel_wakeref_t wakerefs[POWER_DOMAIN_NUM], wf; 10235 enum intel_display_power_domain power_domain; 10236 u64 power_domain_mask; 10237 bool active; 10238 10239 intel_crtc_init_scalers(crtc, pipe_config); 10240 10241 power_domain = POWER_DOMAIN_PIPE(crtc->pipe); 10242 wf = intel_display_power_get_if_enabled(dev_priv, power_domain); 10243 if (!wf) 10244 return false; 10245 10246 wakerefs[power_domain] = wf; 10247 power_domain_mask = BIT_ULL(power_domain); 10248 10249 pipe_config->shared_dpll = NULL; 10250 10251 active = hsw_get_transcoder_state(crtc, pipe_config, 10252 &power_domain_mask, wakerefs); 10253 10254 if (IS_GEN9_LP(dev_priv) && 10255 bxt_get_dsi_transcoder_state(crtc, pipe_config, 10256 &power_domain_mask, wakerefs)) { 10257 WARN_ON(active); 10258 active = true; 10259 } 10260 10261 if (!active) 10262 goto out; 10263 10264 if (!transcoder_is_dsi(pipe_config->cpu_transcoder) || 10265 INTEL_GEN(dev_priv) >= 11) { 10266 haswell_get_ddi_port_state(crtc, pipe_config); 10267 intel_get_pipe_timings(crtc, pipe_config); 10268 } 10269 10270 intel_get_pipe_src_size(crtc, pipe_config); 10271 intel_get_crtc_ycbcr_config(crtc, pipe_config); 10272 10273 pipe_config->gamma_mode = I915_READ(GAMMA_MODE(crtc->pipe)); 10274 10275 pipe_config->csc_mode = I915_READ(PIPE_CSC_MODE(crtc->pipe)); 10276 10277 if (INTEL_GEN(dev_priv) >= 9) { 10278 u32 tmp = I915_READ(SKL_BOTTOM_COLOR(crtc->pipe)); 10279 10280 if (tmp & SKL_BOTTOM_COLOR_GAMMA_ENABLE) 10281 pipe_config->gamma_enable = true; 10282 10283 if (tmp & SKL_BOTTOM_COLOR_CSC_ENABLE) 10284 pipe_config->csc_enable = true; 10285 } else { 10286 i9xx_get_pipe_color_config(pipe_config); 10287 } 10288 10289 intel_color_get_config(pipe_config); 10290 10291 power_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe); 10292 WARN_ON(power_domain_mask & BIT_ULL(power_domain)); 10293 10294 wf = intel_display_power_get_if_enabled(dev_priv, power_domain); 10295 if (wf) { 10296 wakerefs[power_domain] = wf; 10297 power_domain_mask |= BIT_ULL(power_domain); 10298 10299 if (INTEL_GEN(dev_priv) >= 9) 10300 skylake_get_pfit_config(crtc, pipe_config); 10301 else 10302 ironlake_get_pfit_config(crtc, pipe_config); 10303 } 10304 10305 if (hsw_crtc_supports_ips(crtc)) { 10306 if (IS_HASWELL(dev_priv)) 10307 pipe_config->ips_enabled = I915_READ(IPS_CTL) & IPS_ENABLE; 10308 else { 10309 /* 10310 * We cannot readout IPS state on broadwell, set to 10311 * true so we can set it to a defined state on first 10312 * commit. 10313 */ 10314 pipe_config->ips_enabled = true; 10315 } 10316 } 10317 10318 if (pipe_config->cpu_transcoder != TRANSCODER_EDP && 10319 !transcoder_is_dsi(pipe_config->cpu_transcoder)) { 10320 pipe_config->pixel_multiplier = 10321 I915_READ(PIPE_MULT(pipe_config->cpu_transcoder)) + 1; 10322 } else { 10323 pipe_config->pixel_multiplier = 1; 10324 } 10325 10326 out: 10327 for_each_power_domain(power_domain, power_domain_mask) 10328 intel_display_power_put(dev_priv, 10329 power_domain, wakerefs[power_domain]); 10330 10331 return active; 10332 } 10333 10334 static u32 intel_cursor_base(const struct intel_plane_state *plane_state) 10335 { 10336 struct drm_i915_private *dev_priv = 10337 to_i915(plane_state->base.plane->dev); 10338 const struct drm_framebuffer *fb = plane_state->base.fb; 10339 const struct drm_i915_gem_object *obj = intel_fb_obj(fb); 10340 u32 base; 10341 10342 if (INTEL_INFO(dev_priv)->display.cursor_needs_physical) 10343 base = obj->phys_handle->busaddr; 10344 else 10345 base = intel_plane_ggtt_offset(plane_state); 10346 10347 base += plane_state->color_plane[0].offset; 10348 10349 /* ILK+ do this automagically */ 10350 if (HAS_GMCH(dev_priv) && 10351 plane_state->base.rotation & DRM_MODE_ROTATE_180) 10352 base += (plane_state->base.crtc_h * 10353 plane_state->base.crtc_w - 1) * fb->format->cpp[0]; 10354 10355 return base; 10356 } 10357 10358 static u32 intel_cursor_position(const struct intel_plane_state *plane_state) 10359 { 10360 int x = plane_state->base.crtc_x; 10361 int y = plane_state->base.crtc_y; 10362 u32 pos = 0; 10363 10364 if (x < 0) { 10365 pos |= CURSOR_POS_SIGN << CURSOR_X_SHIFT; 10366 x = -x; 10367 } 10368 pos |= x << CURSOR_X_SHIFT; 10369 10370 if (y < 0) { 10371 pos |= CURSOR_POS_SIGN << CURSOR_Y_SHIFT; 10372 y = -y; 10373 } 10374 pos |= y << CURSOR_Y_SHIFT; 10375 10376 return pos; 10377 } 10378 10379 static bool intel_cursor_size_ok(const struct intel_plane_state *plane_state) 10380 { 10381 const struct drm_mode_config *config = 10382 &plane_state->base.plane->dev->mode_config; 10383 int width = plane_state->base.crtc_w; 10384 int height = plane_state->base.crtc_h; 10385 10386 return width > 0 && width <= config->cursor_width && 10387 height > 0 && height <= config->cursor_height; 10388 } 10389 10390 static int intel_cursor_check_surface(struct intel_plane_state *plane_state) 10391 { 10392 int src_x, src_y; 10393 u32 offset; 10394 int ret; 10395 10396 ret = intel_plane_compute_gtt(plane_state); 10397 if (ret) 10398 return ret; 10399 10400 if (!plane_state->base.visible) 10401 return 0; 10402 10403 src_x = plane_state->base.src_x >> 16; 10404 src_y = plane_state->base.src_y >> 16; 10405 10406 intel_add_fb_offsets(&src_x, &src_y, plane_state, 0); 10407 offset = intel_plane_compute_aligned_offset(&src_x, &src_y, 10408 plane_state, 0); 10409 10410 if (src_x != 0 || src_y != 0) { 10411 DRM_DEBUG_KMS("Arbitrary cursor panning not supported\n"); 10412 return -EINVAL; 10413 } 10414 10415 plane_state->color_plane[0].offset = offset; 10416 10417 return 0; 10418 } 10419 10420 static int intel_check_cursor(struct intel_crtc_state *crtc_state, 10421 struct intel_plane_state *plane_state) 10422 { 10423 const struct drm_framebuffer *fb = plane_state->base.fb; 10424 int ret; 10425 10426 if (fb && fb->modifier != DRM_FORMAT_MOD_LINEAR) { 10427 DRM_DEBUG_KMS("cursor cannot be tiled\n"); 10428 return -EINVAL; 10429 } 10430 10431 ret = drm_atomic_helper_check_plane_state(&plane_state->base, 10432 &crtc_state->base, 10433 DRM_PLANE_HELPER_NO_SCALING, 10434 DRM_PLANE_HELPER_NO_SCALING, 10435 true, true); 10436 if (ret) 10437 return ret; 10438 10439 ret = intel_cursor_check_surface(plane_state); 10440 if (ret) 10441 return ret; 10442 10443 if (!plane_state->base.visible) 10444 return 0; 10445 10446 ret = intel_plane_check_src_coordinates(plane_state); 10447 if (ret) 10448 return ret; 10449 10450 return 0; 10451 } 10452 10453 static unsigned int 10454 i845_cursor_max_stride(struct intel_plane *plane, 10455 u32 pixel_format, u64 modifier, 10456 unsigned int rotation) 10457 { 10458 return 2048; 10459 } 10460 10461 static u32 i845_cursor_ctl_crtc(const struct intel_crtc_state *crtc_state) 10462 { 10463 u32 cntl = 0; 10464 10465 if (crtc_state->gamma_enable) 10466 cntl |= CURSOR_GAMMA_ENABLE; 10467 10468 return cntl; 10469 } 10470 10471 static u32 i845_cursor_ctl(const struct intel_crtc_state *crtc_state, 10472 const struct intel_plane_state *plane_state) 10473 { 10474 return CURSOR_ENABLE | 10475 CURSOR_FORMAT_ARGB | 10476 CURSOR_STRIDE(plane_state->color_plane[0].stride); 10477 } 10478 10479 static bool i845_cursor_size_ok(const struct intel_plane_state *plane_state) 10480 { 10481 int width = plane_state->base.crtc_w; 10482 10483 /* 10484 * 845g/865g are only limited by the width of their cursors, 10485 * the height is arbitrary up to the precision of the register. 10486 */ 10487 return intel_cursor_size_ok(plane_state) && IS_ALIGNED(width, 64); 10488 } 10489 10490 static int i845_check_cursor(struct intel_crtc_state *crtc_state, 10491 struct intel_plane_state *plane_state) 10492 { 10493 const struct drm_framebuffer *fb = plane_state->base.fb; 10494 int ret; 10495 10496 ret = intel_check_cursor(crtc_state, plane_state); 10497 if (ret) 10498 return ret; 10499 10500 /* if we want to turn off the cursor ignore width and height */ 10501 if (!fb) 10502 return 0; 10503 10504 /* Check for which cursor types we support */ 10505 if (!i845_cursor_size_ok(plane_state)) { 10506 DRM_DEBUG("Cursor dimension %dx%d not supported\n", 10507 plane_state->base.crtc_w, 10508 plane_state->base.crtc_h); 10509 return -EINVAL; 10510 } 10511 10512 WARN_ON(plane_state->base.visible && 10513 plane_state->color_plane[0].stride != fb->pitches[0]); 10514 10515 switch (fb->pitches[0]) { 10516 case 256: 10517 case 512: 10518 case 1024: 10519 case 2048: 10520 break; 10521 default: 10522 DRM_DEBUG_KMS("Invalid cursor stride (%u)\n", 10523 fb->pitches[0]); 10524 return -EINVAL; 10525 } 10526 10527 plane_state->ctl = i845_cursor_ctl(crtc_state, plane_state); 10528 10529 return 0; 10530 } 10531 10532 static void i845_update_cursor(struct intel_plane *plane, 10533 const struct intel_crtc_state *crtc_state, 10534 const struct intel_plane_state *plane_state) 10535 { 10536 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 10537 u32 cntl = 0, base = 0, pos = 0, size = 0; 10538 unsigned long irqflags; 10539 10540 if (plane_state && plane_state->base.visible) { 10541 unsigned int width = plane_state->base.crtc_w; 10542 unsigned int height = plane_state->base.crtc_h; 10543 10544 cntl = plane_state->ctl | 10545 i845_cursor_ctl_crtc(crtc_state); 10546 10547 size = (height << 12) | width; 10548 10549 base = intel_cursor_base(plane_state); 10550 pos = intel_cursor_position(plane_state); 10551 } 10552 10553 spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); 10554 10555 /* On these chipsets we can only modify the base/size/stride 10556 * whilst the cursor is disabled. 10557 */ 10558 if (plane->cursor.base != base || 10559 plane->cursor.size != size || 10560 plane->cursor.cntl != cntl) { 10561 I915_WRITE_FW(CURCNTR(PIPE_A), 0); 10562 I915_WRITE_FW(CURBASE(PIPE_A), base); 10563 I915_WRITE_FW(CURSIZE, size); 10564 I915_WRITE_FW(CURPOS(PIPE_A), pos); 10565 I915_WRITE_FW(CURCNTR(PIPE_A), cntl); 10566 10567 plane->cursor.base = base; 10568 plane->cursor.size = size; 10569 plane->cursor.cntl = cntl; 10570 } else { 10571 I915_WRITE_FW(CURPOS(PIPE_A), pos); 10572 } 10573 10574 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); 10575 } 10576 10577 static void i845_disable_cursor(struct intel_plane *plane, 10578 const struct intel_crtc_state *crtc_state) 10579 { 10580 i845_update_cursor(plane, crtc_state, NULL); 10581 } 10582 10583 static bool i845_cursor_get_hw_state(struct intel_plane *plane, 10584 enum pipe *pipe) 10585 { 10586 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 10587 enum intel_display_power_domain power_domain; 10588 intel_wakeref_t wakeref; 10589 bool ret; 10590 10591 power_domain = POWER_DOMAIN_PIPE(PIPE_A); 10592 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 10593 if (!wakeref) 10594 return false; 10595 10596 ret = I915_READ(CURCNTR(PIPE_A)) & CURSOR_ENABLE; 10597 10598 *pipe = PIPE_A; 10599 10600 intel_display_power_put(dev_priv, power_domain, wakeref); 10601 10602 return ret; 10603 } 10604 10605 static unsigned int 10606 i9xx_cursor_max_stride(struct intel_plane *plane, 10607 u32 pixel_format, u64 modifier, 10608 unsigned int rotation) 10609 { 10610 return plane->base.dev->mode_config.cursor_width * 4; 10611 } 10612 10613 static u32 i9xx_cursor_ctl_crtc(const struct intel_crtc_state *crtc_state) 10614 { 10615 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 10616 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 10617 u32 cntl = 0; 10618 10619 if (INTEL_GEN(dev_priv) >= 11) 10620 return cntl; 10621 10622 if (crtc_state->gamma_enable) 10623 cntl = MCURSOR_GAMMA_ENABLE; 10624 10625 if (crtc_state->csc_enable) 10626 cntl |= MCURSOR_PIPE_CSC_ENABLE; 10627 10628 if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) 10629 cntl |= MCURSOR_PIPE_SELECT(crtc->pipe); 10630 10631 return cntl; 10632 } 10633 10634 static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state, 10635 const struct intel_plane_state *plane_state) 10636 { 10637 struct drm_i915_private *dev_priv = 10638 to_i915(plane_state->base.plane->dev); 10639 u32 cntl = 0; 10640 10641 if (IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv)) 10642 cntl |= MCURSOR_TRICKLE_FEED_DISABLE; 10643 10644 switch (plane_state->base.crtc_w) { 10645 case 64: 10646 cntl |= MCURSOR_MODE_64_ARGB_AX; 10647 break; 10648 case 128: 10649 cntl |= MCURSOR_MODE_128_ARGB_AX; 10650 break; 10651 case 256: 10652 cntl |= MCURSOR_MODE_256_ARGB_AX; 10653 break; 10654 default: 10655 MISSING_CASE(plane_state->base.crtc_w); 10656 return 0; 10657 } 10658 10659 if (plane_state->base.rotation & DRM_MODE_ROTATE_180) 10660 cntl |= MCURSOR_ROTATE_180; 10661 10662 return cntl; 10663 } 10664 10665 static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) 10666 { 10667 struct drm_i915_private *dev_priv = 10668 to_i915(plane_state->base.plane->dev); 10669 int width = plane_state->base.crtc_w; 10670 int height = plane_state->base.crtc_h; 10671 10672 if (!intel_cursor_size_ok(plane_state)) 10673 return false; 10674 10675 /* Cursor width is limited to a few power-of-two sizes */ 10676 switch (width) { 10677 case 256: 10678 case 128: 10679 case 64: 10680 break; 10681 default: 10682 return false; 10683 } 10684 10685 /* 10686 * IVB+ have CUR_FBC_CTL which allows an arbitrary cursor 10687 * height from 8 lines up to the cursor width, when the 10688 * cursor is not rotated. Everything else requires square 10689 * cursors. 10690 */ 10691 if (HAS_CUR_FBC(dev_priv) && 10692 plane_state->base.rotation & DRM_MODE_ROTATE_0) { 10693 if (height < 8 || height > width) 10694 return false; 10695 } else { 10696 if (height != width) 10697 return false; 10698 } 10699 10700 return true; 10701 } 10702 10703 static int i9xx_check_cursor(struct intel_crtc_state *crtc_state, 10704 struct intel_plane_state *plane_state) 10705 { 10706 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 10707 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 10708 const struct drm_framebuffer *fb = plane_state->base.fb; 10709 enum pipe pipe = plane->pipe; 10710 int ret; 10711 10712 ret = intel_check_cursor(crtc_state, plane_state); 10713 if (ret) 10714 return ret; 10715 10716 /* if we want to turn off the cursor ignore width and height */ 10717 if (!fb) 10718 return 0; 10719 10720 /* Check for which cursor types we support */ 10721 if (!i9xx_cursor_size_ok(plane_state)) { 10722 DRM_DEBUG("Cursor dimension %dx%d not supported\n", 10723 plane_state->base.crtc_w, 10724 plane_state->base.crtc_h); 10725 return -EINVAL; 10726 } 10727 10728 WARN_ON(plane_state->base.visible && 10729 plane_state->color_plane[0].stride != fb->pitches[0]); 10730 10731 if (fb->pitches[0] != plane_state->base.crtc_w * fb->format->cpp[0]) { 10732 DRM_DEBUG_KMS("Invalid cursor stride (%u) (cursor width %d)\n", 10733 fb->pitches[0], plane_state->base.crtc_w); 10734 return -EINVAL; 10735 } 10736 10737 /* 10738 * There's something wrong with the cursor on CHV pipe C. 10739 * If it straddles the left edge of the screen then 10740 * moving it away from the edge or disabling it often 10741 * results in a pipe underrun, and often that can lead to 10742 * dead pipe (constant underrun reported, and it scans 10743 * out just a solid color). To recover from that, the 10744 * display power well must be turned off and on again. 10745 * Refuse the put the cursor into that compromised position. 10746 */ 10747 if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_C && 10748 plane_state->base.visible && plane_state->base.crtc_x < 0) { 10749 DRM_DEBUG_KMS("CHV cursor C not allowed to straddle the left screen edge\n"); 10750 return -EINVAL; 10751 } 10752 10753 plane_state->ctl = i9xx_cursor_ctl(crtc_state, plane_state); 10754 10755 return 0; 10756 } 10757 10758 static void i9xx_update_cursor(struct intel_plane *plane, 10759 const struct intel_crtc_state *crtc_state, 10760 const struct intel_plane_state *plane_state) 10761 { 10762 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 10763 enum pipe pipe = plane->pipe; 10764 u32 cntl = 0, base = 0, pos = 0, fbc_ctl = 0; 10765 unsigned long irqflags; 10766 10767 if (plane_state && plane_state->base.visible) { 10768 cntl = plane_state->ctl | 10769 i9xx_cursor_ctl_crtc(crtc_state); 10770 10771 if (plane_state->base.crtc_h != plane_state->base.crtc_w) 10772 fbc_ctl = CUR_FBC_CTL_EN | (plane_state->base.crtc_h - 1); 10773 10774 base = intel_cursor_base(plane_state); 10775 pos = intel_cursor_position(plane_state); 10776 } 10777 10778 spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); 10779 10780 /* 10781 * On some platforms writing CURCNTR first will also 10782 * cause CURPOS to be armed by the CURBASE write. 10783 * Without the CURCNTR write the CURPOS write would 10784 * arm itself. Thus we always update CURCNTR before 10785 * CURPOS. 10786 * 10787 * On other platforms CURPOS always requires the 10788 * CURBASE write to arm the update. Additonally 10789 * a write to any of the cursor register will cancel 10790 * an already armed cursor update. Thus leaving out 10791 * the CURBASE write after CURPOS could lead to a 10792 * cursor that doesn't appear to move, or even change 10793 * shape. Thus we always write CURBASE. 10794 * 10795 * The other registers are armed by by the CURBASE write 10796 * except when the plane is getting enabled at which time 10797 * the CURCNTR write arms the update. 10798 */ 10799 10800 if (INTEL_GEN(dev_priv) >= 9) 10801 skl_write_cursor_wm(plane, crtc_state); 10802 10803 if (plane->cursor.base != base || 10804 plane->cursor.size != fbc_ctl || 10805 plane->cursor.cntl != cntl) { 10806 if (HAS_CUR_FBC(dev_priv)) 10807 I915_WRITE_FW(CUR_FBC_CTL(pipe), fbc_ctl); 10808 I915_WRITE_FW(CURCNTR(pipe), cntl); 10809 I915_WRITE_FW(CURPOS(pipe), pos); 10810 I915_WRITE_FW(CURBASE(pipe), base); 10811 10812 plane->cursor.base = base; 10813 plane->cursor.size = fbc_ctl; 10814 plane->cursor.cntl = cntl; 10815 } else { 10816 I915_WRITE_FW(CURPOS(pipe), pos); 10817 I915_WRITE_FW(CURBASE(pipe), base); 10818 } 10819 10820 spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); 10821 } 10822 10823 static void i9xx_disable_cursor(struct intel_plane *plane, 10824 const struct intel_crtc_state *crtc_state) 10825 { 10826 i9xx_update_cursor(plane, crtc_state, NULL); 10827 } 10828 10829 static bool i9xx_cursor_get_hw_state(struct intel_plane *plane, 10830 enum pipe *pipe) 10831 { 10832 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 10833 enum intel_display_power_domain power_domain; 10834 intel_wakeref_t wakeref; 10835 bool ret; 10836 u32 val; 10837 10838 /* 10839 * Not 100% correct for planes that can move between pipes, 10840 * but that's only the case for gen2-3 which don't have any 10841 * display power wells. 10842 */ 10843 power_domain = POWER_DOMAIN_PIPE(plane->pipe); 10844 wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain); 10845 if (!wakeref) 10846 return false; 10847 10848 val = I915_READ(CURCNTR(plane->pipe)); 10849 10850 ret = val & MCURSOR_MODE; 10851 10852 if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)) 10853 *pipe = plane->pipe; 10854 else 10855 *pipe = (val & MCURSOR_PIPE_SELECT_MASK) >> 10856 MCURSOR_PIPE_SELECT_SHIFT; 10857 10858 intel_display_power_put(dev_priv, power_domain, wakeref); 10859 10860 return ret; 10861 } 10862 10863 /* VESA 640x480x72Hz mode to set on the pipe */ 10864 static const struct drm_display_mode load_detect_mode = { 10865 DRM_MODE("640x480", DRM_MODE_TYPE_DEFAULT, 31500, 640, 664, 10866 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), 10867 }; 10868 10869 struct drm_framebuffer * 10870 intel_framebuffer_create(struct drm_i915_gem_object *obj, 10871 struct drm_mode_fb_cmd2 *mode_cmd) 10872 { 10873 struct intel_framebuffer *intel_fb; 10874 int ret; 10875 10876 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); 10877 if (!intel_fb) 10878 return ERR_PTR(-ENOMEM); 10879 10880 ret = intel_framebuffer_init(intel_fb, obj, mode_cmd); 10881 if (ret) 10882 goto err; 10883 10884 return &intel_fb->base; 10885 10886 err: 10887 kfree(intel_fb); 10888 return ERR_PTR(ret); 10889 } 10890 10891 static int intel_modeset_disable_planes(struct drm_atomic_state *state, 10892 struct drm_crtc *crtc) 10893 { 10894 struct drm_plane *plane; 10895 struct drm_plane_state *plane_state; 10896 int ret, i; 10897 10898 ret = drm_atomic_add_affected_planes(state, crtc); 10899 if (ret) 10900 return ret; 10901 10902 for_each_new_plane_in_state(state, plane, plane_state, i) { 10903 if (plane_state->crtc != crtc) 10904 continue; 10905 10906 ret = drm_atomic_set_crtc_for_plane(plane_state, NULL); 10907 if (ret) 10908 return ret; 10909 10910 drm_atomic_set_fb_for_plane(plane_state, NULL); 10911 } 10912 10913 return 0; 10914 } 10915 10916 int intel_get_load_detect_pipe(struct drm_connector *connector, 10917 const struct drm_display_mode *mode, 10918 struct intel_load_detect_pipe *old, 10919 struct drm_modeset_acquire_ctx *ctx) 10920 { 10921 struct intel_crtc *intel_crtc; 10922 struct intel_encoder *intel_encoder = 10923 intel_attached_encoder(connector); 10924 struct drm_crtc *possible_crtc; 10925 struct drm_encoder *encoder = &intel_encoder->base; 10926 struct drm_crtc *crtc = NULL; 10927 struct drm_device *dev = encoder->dev; 10928 struct drm_i915_private *dev_priv = to_i915(dev); 10929 struct drm_mode_config *config = &dev->mode_config; 10930 struct drm_atomic_state *state = NULL, *restore_state = NULL; 10931 struct drm_connector_state *connector_state; 10932 struct intel_crtc_state *crtc_state; 10933 int ret, i = -1; 10934 10935 DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n", 10936 connector->base.id, connector->name, 10937 encoder->base.id, encoder->name); 10938 10939 old->restore_state = NULL; 10940 10941 WARN_ON(!drm_modeset_is_locked(&config->connection_mutex)); 10942 10943 /* 10944 * Algorithm gets a little messy: 10945 * 10946 * - if the connector already has an assigned crtc, use it (but make 10947 * sure it's on first) 10948 * 10949 * - try to find the first unused crtc that can drive this connector, 10950 * and use that if we find one 10951 */ 10952 10953 /* See if we already have a CRTC for this connector */ 10954 if (connector->state->crtc) { 10955 crtc = connector->state->crtc; 10956 10957 ret = drm_modeset_lock(&crtc->mutex, ctx); 10958 if (ret) 10959 goto fail; 10960 10961 /* Make sure the crtc and connector are running */ 10962 goto found; 10963 } 10964 10965 /* Find an unused one (if possible) */ 10966 for_each_crtc(dev, possible_crtc) { 10967 i++; 10968 if (!(encoder->possible_crtcs & (1 << i))) 10969 continue; 10970 10971 ret = drm_modeset_lock(&possible_crtc->mutex, ctx); 10972 if (ret) 10973 goto fail; 10974 10975 if (possible_crtc->state->enable) { 10976 drm_modeset_unlock(&possible_crtc->mutex); 10977 continue; 10978 } 10979 10980 crtc = possible_crtc; 10981 break; 10982 } 10983 10984 /* 10985 * If we didn't find an unused CRTC, don't use any. 10986 */ 10987 if (!crtc) { 10988 DRM_DEBUG_KMS("no pipe available for load-detect\n"); 10989 ret = -ENODEV; 10990 goto fail; 10991 } 10992 10993 found: 10994 intel_crtc = to_intel_crtc(crtc); 10995 10996 state = drm_atomic_state_alloc(dev); 10997 restore_state = drm_atomic_state_alloc(dev); 10998 if (!state || !restore_state) { 10999 ret = -ENOMEM; 11000 goto fail; 11001 } 11002 11003 state->acquire_ctx = ctx; 11004 restore_state->acquire_ctx = ctx; 11005 11006 connector_state = drm_atomic_get_connector_state(state, connector); 11007 if (IS_ERR(connector_state)) { 11008 ret = PTR_ERR(connector_state); 11009 goto fail; 11010 } 11011 11012 ret = drm_atomic_set_crtc_for_connector(connector_state, crtc); 11013 if (ret) 11014 goto fail; 11015 11016 crtc_state = intel_atomic_get_crtc_state(state, intel_crtc); 11017 if (IS_ERR(crtc_state)) { 11018 ret = PTR_ERR(crtc_state); 11019 goto fail; 11020 } 11021 11022 crtc_state->base.active = crtc_state->base.enable = true; 11023 11024 if (!mode) 11025 mode = &load_detect_mode; 11026 11027 ret = drm_atomic_set_mode_for_crtc(&crtc_state->base, mode); 11028 if (ret) 11029 goto fail; 11030 11031 ret = intel_modeset_disable_planes(state, crtc); 11032 if (ret) 11033 goto fail; 11034 11035 ret = PTR_ERR_OR_ZERO(drm_atomic_get_connector_state(restore_state, connector)); 11036 if (!ret) 11037 ret = PTR_ERR_OR_ZERO(drm_atomic_get_crtc_state(restore_state, crtc)); 11038 if (!ret) 11039 ret = drm_atomic_add_affected_planes(restore_state, crtc); 11040 if (ret) { 11041 DRM_DEBUG_KMS("Failed to create a copy of old state to restore: %i\n", ret); 11042 goto fail; 11043 } 11044 11045 ret = drm_atomic_commit(state); 11046 if (ret) { 11047 DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n"); 11048 goto fail; 11049 } 11050 11051 old->restore_state = restore_state; 11052 drm_atomic_state_put(state); 11053 11054 /* let the connector get through one full cycle before testing */ 11055 intel_wait_for_vblank(dev_priv, intel_crtc->pipe); 11056 return true; 11057 11058 fail: 11059 if (state) { 11060 drm_atomic_state_put(state); 11061 state = NULL; 11062 } 11063 if (restore_state) { 11064 drm_atomic_state_put(restore_state); 11065 restore_state = NULL; 11066 } 11067 11068 if (ret == -EDEADLK) 11069 return ret; 11070 11071 return false; 11072 } 11073 11074 void intel_release_load_detect_pipe(struct drm_connector *connector, 11075 struct intel_load_detect_pipe *old, 11076 struct drm_modeset_acquire_ctx *ctx) 11077 { 11078 struct intel_encoder *intel_encoder = 11079 intel_attached_encoder(connector); 11080 struct drm_encoder *encoder = &intel_encoder->base; 11081 struct drm_atomic_state *state = old->restore_state; 11082 int ret; 11083 11084 DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n", 11085 connector->base.id, connector->name, 11086 encoder->base.id, encoder->name); 11087 11088 if (!state) 11089 return; 11090 11091 ret = drm_atomic_helper_commit_duplicated_state(state, ctx); 11092 if (ret) 11093 DRM_DEBUG_KMS("Couldn't release load detect pipe: %i\n", ret); 11094 drm_atomic_state_put(state); 11095 } 11096 11097 static int i9xx_pll_refclk(struct drm_device *dev, 11098 const struct intel_crtc_state *pipe_config) 11099 { 11100 struct drm_i915_private *dev_priv = to_i915(dev); 11101 u32 dpll = pipe_config->dpll_hw_state.dpll; 11102 11103 if ((dpll & PLL_REF_INPUT_MASK) == PLLB_REF_INPUT_SPREADSPECTRUMIN) 11104 return dev_priv->vbt.lvds_ssc_freq; 11105 else if (HAS_PCH_SPLIT(dev_priv)) 11106 return 120000; 11107 else if (!IS_GEN(dev_priv, 2)) 11108 return 96000; 11109 else 11110 return 48000; 11111 } 11112 11113 /* Returns the clock of the currently programmed mode of the given pipe. */ 11114 static void i9xx_crtc_clock_get(struct intel_crtc *crtc, 11115 struct intel_crtc_state *pipe_config) 11116 { 11117 struct drm_device *dev = crtc->base.dev; 11118 struct drm_i915_private *dev_priv = to_i915(dev); 11119 int pipe = pipe_config->cpu_transcoder; 11120 u32 dpll = pipe_config->dpll_hw_state.dpll; 11121 u32 fp; 11122 struct dpll clock; 11123 int port_clock; 11124 int refclk = i9xx_pll_refclk(dev, pipe_config); 11125 11126 if ((dpll & DISPLAY_RATE_SELECT_FPA1) == 0) 11127 fp = pipe_config->dpll_hw_state.fp0; 11128 else 11129 fp = pipe_config->dpll_hw_state.fp1; 11130 11131 clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT; 11132 if (IS_PINEVIEW(dev_priv)) { 11133 clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1; 11134 clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT; 11135 } else { 11136 clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT; 11137 clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT; 11138 } 11139 11140 if (!IS_GEN(dev_priv, 2)) { 11141 if (IS_PINEVIEW(dev_priv)) 11142 clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >> 11143 DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW); 11144 else 11145 clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK) >> 11146 DPLL_FPA01_P1_POST_DIV_SHIFT); 11147 11148 switch (dpll & DPLL_MODE_MASK) { 11149 case DPLLB_MODE_DAC_SERIAL: 11150 clock.p2 = dpll & DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 ? 11151 5 : 10; 11152 break; 11153 case DPLLB_MODE_LVDS: 11154 clock.p2 = dpll & DPLLB_LVDS_P2_CLOCK_DIV_7 ? 11155 7 : 14; 11156 break; 11157 default: 11158 DRM_DEBUG_KMS("Unknown DPLL mode %08x in programmed " 11159 "mode\n", (int)(dpll & DPLL_MODE_MASK)); 11160 return; 11161 } 11162 11163 if (IS_PINEVIEW(dev_priv)) 11164 port_clock = pnv_calc_dpll_params(refclk, &clock); 11165 else 11166 port_clock = i9xx_calc_dpll_params(refclk, &clock); 11167 } else { 11168 u32 lvds = IS_I830(dev_priv) ? 0 : I915_READ(LVDS); 11169 bool is_lvds = (pipe == 1) && (lvds & LVDS_PORT_EN); 11170 11171 if (is_lvds) { 11172 clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >> 11173 DPLL_FPA01_P1_POST_DIV_SHIFT); 11174 11175 if (lvds & LVDS_CLKB_POWER_UP) 11176 clock.p2 = 7; 11177 else 11178 clock.p2 = 14; 11179 } else { 11180 if (dpll & PLL_P1_DIVIDE_BY_TWO) 11181 clock.p1 = 2; 11182 else { 11183 clock.p1 = ((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830) >> 11184 DPLL_FPA01_P1_POST_DIV_SHIFT) + 2; 11185 } 11186 if (dpll & PLL_P2_DIVIDE_BY_4) 11187 clock.p2 = 4; 11188 else 11189 clock.p2 = 2; 11190 } 11191 11192 port_clock = i9xx_calc_dpll_params(refclk, &clock); 11193 } 11194 11195 /* 11196 * This value includes pixel_multiplier. We will use 11197 * port_clock to compute adjusted_mode.crtc_clock in the 11198 * encoder's get_config() function. 11199 */ 11200 pipe_config->port_clock = port_clock; 11201 } 11202 11203 int intel_dotclock_calculate(int link_freq, 11204 const struct intel_link_m_n *m_n) 11205 { 11206 /* 11207 * The calculation for the data clock is: 11208 * pixel_clock = ((m/n)*(link_clock * nr_lanes))/bpp 11209 * But we want to avoid losing precison if possible, so: 11210 * pixel_clock = ((m * link_clock * nr_lanes)/(n*bpp)) 11211 * 11212 * and the link clock is simpler: 11213 * link_clock = (m * link_clock) / n 11214 */ 11215 11216 if (!m_n->link_n) 11217 return 0; 11218 11219 return div_u64(mul_u32_u32(m_n->link_m, link_freq), m_n->link_n); 11220 } 11221 11222 static void ironlake_pch_clock_get(struct intel_crtc *crtc, 11223 struct intel_crtc_state *pipe_config) 11224 { 11225 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 11226 11227 /* read out port_clock from the DPLL */ 11228 i9xx_crtc_clock_get(crtc, pipe_config); 11229 11230 /* 11231 * In case there is an active pipe without active ports, 11232 * we may need some idea for the dotclock anyway. 11233 * Calculate one based on the FDI configuration. 11234 */ 11235 pipe_config->base.adjusted_mode.crtc_clock = 11236 intel_dotclock_calculate(intel_fdi_link_freq(dev_priv, pipe_config), 11237 &pipe_config->fdi_m_n); 11238 } 11239 11240 /* Returns the currently programmed mode of the given encoder. */ 11241 struct drm_display_mode * 11242 intel_encoder_current_mode(struct intel_encoder *encoder) 11243 { 11244 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 11245 struct intel_crtc_state *crtc_state; 11246 struct drm_display_mode *mode; 11247 struct intel_crtc *crtc; 11248 enum pipe pipe; 11249 11250 if (!encoder->get_hw_state(encoder, &pipe)) 11251 return NULL; 11252 11253 crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 11254 11255 mode = kzalloc(sizeof(*mode), GFP_KERNEL); 11256 if (!mode) 11257 return NULL; 11258 11259 crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); 11260 if (!crtc_state) { 11261 kfree(mode); 11262 return NULL; 11263 } 11264 11265 crtc_state->base.crtc = &crtc->base; 11266 11267 if (!dev_priv->display.get_pipe_config(crtc, crtc_state)) { 11268 kfree(crtc_state); 11269 kfree(mode); 11270 return NULL; 11271 } 11272 11273 encoder->get_config(encoder, crtc_state); 11274 11275 intel_mode_from_pipe_config(mode, crtc_state); 11276 11277 kfree(crtc_state); 11278 11279 return mode; 11280 } 11281 11282 static void intel_crtc_destroy(struct drm_crtc *crtc) 11283 { 11284 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 11285 11286 drm_crtc_cleanup(crtc); 11287 kfree(intel_crtc); 11288 } 11289 11290 /** 11291 * intel_wm_need_update - Check whether watermarks need updating 11292 * @cur: current plane state 11293 * @new: new plane state 11294 * 11295 * Check current plane state versus the new one to determine whether 11296 * watermarks need to be recalculated. 11297 * 11298 * Returns true or false. 11299 */ 11300 static bool intel_wm_need_update(struct intel_plane_state *cur, 11301 struct intel_plane_state *new) 11302 { 11303 /* Update watermarks on tiling or size changes. */ 11304 if (new->base.visible != cur->base.visible) 11305 return true; 11306 11307 if (!cur->base.fb || !new->base.fb) 11308 return false; 11309 11310 if (cur->base.fb->modifier != new->base.fb->modifier || 11311 cur->base.rotation != new->base.rotation || 11312 drm_rect_width(&new->base.src) != drm_rect_width(&cur->base.src) || 11313 drm_rect_height(&new->base.src) != drm_rect_height(&cur->base.src) || 11314 drm_rect_width(&new->base.dst) != drm_rect_width(&cur->base.dst) || 11315 drm_rect_height(&new->base.dst) != drm_rect_height(&cur->base.dst)) 11316 return true; 11317 11318 return false; 11319 } 11320 11321 static bool needs_scaling(const struct intel_plane_state *state) 11322 { 11323 int src_w = drm_rect_width(&state->base.src) >> 16; 11324 int src_h = drm_rect_height(&state->base.src) >> 16; 11325 int dst_w = drm_rect_width(&state->base.dst); 11326 int dst_h = drm_rect_height(&state->base.dst); 11327 11328 return (src_w != dst_w || src_h != dst_h); 11329 } 11330 11331 int intel_plane_atomic_calc_changes(const struct intel_crtc_state *old_crtc_state, 11332 struct drm_crtc_state *crtc_state, 11333 const struct intel_plane_state *old_plane_state, 11334 struct drm_plane_state *plane_state) 11335 { 11336 struct intel_crtc_state *pipe_config = to_intel_crtc_state(crtc_state); 11337 struct drm_crtc *crtc = crtc_state->crtc; 11338 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 11339 struct intel_plane *plane = to_intel_plane(plane_state->plane); 11340 struct drm_device *dev = crtc->dev; 11341 struct drm_i915_private *dev_priv = to_i915(dev); 11342 bool mode_changed = needs_modeset(crtc_state); 11343 bool was_crtc_enabled = old_crtc_state->base.active; 11344 bool is_crtc_enabled = crtc_state->active; 11345 bool turn_off, turn_on, visible, was_visible; 11346 struct drm_framebuffer *fb = plane_state->fb; 11347 int ret; 11348 11349 if (INTEL_GEN(dev_priv) >= 9 && plane->id != PLANE_CURSOR) { 11350 ret = skl_update_scaler_plane( 11351 to_intel_crtc_state(crtc_state), 11352 to_intel_plane_state(plane_state)); 11353 if (ret) 11354 return ret; 11355 } 11356 11357 was_visible = old_plane_state->base.visible; 11358 visible = plane_state->visible; 11359 11360 if (!was_crtc_enabled && WARN_ON(was_visible)) 11361 was_visible = false; 11362 11363 /* 11364 * Visibility is calculated as if the crtc was on, but 11365 * after scaler setup everything depends on it being off 11366 * when the crtc isn't active. 11367 * 11368 * FIXME this is wrong for watermarks. Watermarks should also 11369 * be computed as if the pipe would be active. Perhaps move 11370 * per-plane wm computation to the .check_plane() hook, and 11371 * only combine the results from all planes in the current place? 11372 */ 11373 if (!is_crtc_enabled) { 11374 plane_state->visible = visible = false; 11375 to_intel_crtc_state(crtc_state)->active_planes &= ~BIT(plane->id); 11376 to_intel_crtc_state(crtc_state)->data_rate[plane->id] = 0; 11377 } 11378 11379 if (!was_visible && !visible) 11380 return 0; 11381 11382 if (fb != old_plane_state->base.fb) 11383 pipe_config->fb_changed = true; 11384 11385 turn_off = was_visible && (!visible || mode_changed); 11386 turn_on = visible && (!was_visible || mode_changed); 11387 11388 DRM_DEBUG_ATOMIC("[CRTC:%d:%s] has [PLANE:%d:%s] with fb %i\n", 11389 intel_crtc->base.base.id, intel_crtc->base.name, 11390 plane->base.base.id, plane->base.name, 11391 fb ? fb->base.id : -1); 11392 11393 DRM_DEBUG_ATOMIC("[PLANE:%d:%s] visible %i -> %i, off %i, on %i, ms %i\n", 11394 plane->base.base.id, plane->base.name, 11395 was_visible, visible, 11396 turn_off, turn_on, mode_changed); 11397 11398 if (turn_on) { 11399 if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) 11400 pipe_config->update_wm_pre = true; 11401 11402 /* must disable cxsr around plane enable/disable */ 11403 if (plane->id != PLANE_CURSOR) 11404 pipe_config->disable_cxsr = true; 11405 } else if (turn_off) { 11406 if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) 11407 pipe_config->update_wm_post = true; 11408 11409 /* must disable cxsr around plane enable/disable */ 11410 if (plane->id != PLANE_CURSOR) 11411 pipe_config->disable_cxsr = true; 11412 } else if (intel_wm_need_update(to_intel_plane_state(plane->base.state), 11413 to_intel_plane_state(plane_state))) { 11414 if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) { 11415 /* FIXME bollocks */ 11416 pipe_config->update_wm_pre = true; 11417 pipe_config->update_wm_post = true; 11418 } 11419 } 11420 11421 if (visible || was_visible) 11422 pipe_config->fb_bits |= plane->frontbuffer_bit; 11423 11424 /* 11425 * ILK/SNB DVSACNTR/Sprite Enable 11426 * IVB SPR_CTL/Sprite Enable 11427 * "When in Self Refresh Big FIFO mode, a write to enable the 11428 * plane will be internally buffered and delayed while Big FIFO 11429 * mode is exiting." 11430 * 11431 * Which means that enabling the sprite can take an extra frame 11432 * when we start in big FIFO mode (LP1+). Thus we need to drop 11433 * down to LP0 and wait for vblank in order to make sure the 11434 * sprite gets enabled on the next vblank after the register write. 11435 * Doing otherwise would risk enabling the sprite one frame after 11436 * we've already signalled flip completion. We can resume LP1+ 11437 * once the sprite has been enabled. 11438 * 11439 * 11440 * WaCxSRDisabledForSpriteScaling:ivb 11441 * IVB SPR_SCALE/Scaling Enable 11442 * "Low Power watermarks must be disabled for at least one 11443 * frame before enabling sprite scaling, and kept disabled 11444 * until sprite scaling is disabled." 11445 * 11446 * ILK/SNB DVSASCALE/Scaling Enable 11447 * "When in Self Refresh Big FIFO mode, scaling enable will be 11448 * masked off while Big FIFO mode is exiting." 11449 * 11450 * Despite the w/a only being listed for IVB we assume that 11451 * the ILK/SNB note has similar ramifications, hence we apply 11452 * the w/a on all three platforms. 11453 * 11454 * With experimental results seems this is needed also for primary 11455 * plane, not only sprite plane. 11456 */ 11457 if (plane->id != PLANE_CURSOR && 11458 (IS_GEN_RANGE(dev_priv, 5, 6) || 11459 IS_IVYBRIDGE(dev_priv)) && 11460 (turn_on || (!needs_scaling(old_plane_state) && 11461 needs_scaling(to_intel_plane_state(plane_state))))) 11462 pipe_config->disable_lp_wm = true; 11463 11464 return 0; 11465 } 11466 11467 static bool encoders_cloneable(const struct intel_encoder *a, 11468 const struct intel_encoder *b) 11469 { 11470 /* masks could be asymmetric, so check both ways */ 11471 return a == b || (a->cloneable & (1 << b->type) && 11472 b->cloneable & (1 << a->type)); 11473 } 11474 11475 static bool check_single_encoder_cloning(struct drm_atomic_state *state, 11476 struct intel_crtc *crtc, 11477 struct intel_encoder *encoder) 11478 { 11479 struct intel_encoder *source_encoder; 11480 struct drm_connector *connector; 11481 struct drm_connector_state *connector_state; 11482 int i; 11483 11484 for_each_new_connector_in_state(state, connector, connector_state, i) { 11485 if (connector_state->crtc != &crtc->base) 11486 continue; 11487 11488 source_encoder = 11489 to_intel_encoder(connector_state->best_encoder); 11490 if (!encoders_cloneable(encoder, source_encoder)) 11491 return false; 11492 } 11493 11494 return true; 11495 } 11496 11497 static int icl_add_linked_planes(struct intel_atomic_state *state) 11498 { 11499 struct intel_plane *plane, *linked; 11500 struct intel_plane_state *plane_state, *linked_plane_state; 11501 int i; 11502 11503 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 11504 linked = plane_state->linked_plane; 11505 11506 if (!linked) 11507 continue; 11508 11509 linked_plane_state = intel_atomic_get_plane_state(state, linked); 11510 if (IS_ERR(linked_plane_state)) 11511 return PTR_ERR(linked_plane_state); 11512 11513 WARN_ON(linked_plane_state->linked_plane != plane); 11514 WARN_ON(linked_plane_state->slave == plane_state->slave); 11515 } 11516 11517 return 0; 11518 } 11519 11520 static int icl_check_nv12_planes(struct intel_crtc_state *crtc_state) 11521 { 11522 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 11523 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 11524 struct intel_atomic_state *state = to_intel_atomic_state(crtc_state->base.state); 11525 struct intel_plane *plane, *linked; 11526 struct intel_plane_state *plane_state; 11527 int i; 11528 11529 if (INTEL_GEN(dev_priv) < 11) 11530 return 0; 11531 11532 /* 11533 * Destroy all old plane links and make the slave plane invisible 11534 * in the crtc_state->active_planes mask. 11535 */ 11536 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 11537 if (plane->pipe != crtc->pipe || !plane_state->linked_plane) 11538 continue; 11539 11540 plane_state->linked_plane = NULL; 11541 if (plane_state->slave && !plane_state->base.visible) { 11542 crtc_state->active_planes &= ~BIT(plane->id); 11543 crtc_state->update_planes |= BIT(plane->id); 11544 } 11545 11546 plane_state->slave = false; 11547 } 11548 11549 if (!crtc_state->nv12_planes) 11550 return 0; 11551 11552 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 11553 struct intel_plane_state *linked_state = NULL; 11554 11555 if (plane->pipe != crtc->pipe || 11556 !(crtc_state->nv12_planes & BIT(plane->id))) 11557 continue; 11558 11559 for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, linked) { 11560 if (!icl_is_nv12_y_plane(linked->id)) 11561 continue; 11562 11563 if (crtc_state->active_planes & BIT(linked->id)) 11564 continue; 11565 11566 linked_state = intel_atomic_get_plane_state(state, linked); 11567 if (IS_ERR(linked_state)) 11568 return PTR_ERR(linked_state); 11569 11570 break; 11571 } 11572 11573 if (!linked_state) { 11574 DRM_DEBUG_KMS("Need %d free Y planes for planar YUV\n", 11575 hweight8(crtc_state->nv12_planes)); 11576 11577 return -EINVAL; 11578 } 11579 11580 plane_state->linked_plane = linked; 11581 11582 linked_state->slave = true; 11583 linked_state->linked_plane = plane; 11584 crtc_state->active_planes |= BIT(linked->id); 11585 crtc_state->update_planes |= BIT(linked->id); 11586 DRM_DEBUG_KMS("Using %s as Y plane for %s\n", linked->base.name, plane->base.name); 11587 } 11588 11589 return 0; 11590 } 11591 11592 static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state) 11593 { 11594 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->base.crtc); 11595 struct intel_atomic_state *state = 11596 to_intel_atomic_state(new_crtc_state->base.state); 11597 const struct intel_crtc_state *old_crtc_state = 11598 intel_atomic_get_old_crtc_state(state, crtc); 11599 11600 return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes; 11601 } 11602 11603 static int intel_crtc_atomic_check(struct drm_crtc *crtc, 11604 struct drm_crtc_state *crtc_state) 11605 { 11606 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 11607 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 11608 struct intel_crtc_state *pipe_config = 11609 to_intel_crtc_state(crtc_state); 11610 int ret; 11611 bool mode_changed = needs_modeset(crtc_state); 11612 11613 if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv) && 11614 mode_changed && !crtc_state->active) 11615 pipe_config->update_wm_post = true; 11616 11617 if (mode_changed && crtc_state->enable && 11618 dev_priv->display.crtc_compute_clock && 11619 !WARN_ON(pipe_config->shared_dpll)) { 11620 ret = dev_priv->display.crtc_compute_clock(intel_crtc, 11621 pipe_config); 11622 if (ret) 11623 return ret; 11624 } 11625 11626 /* 11627 * May need to update pipe gamma enable bits 11628 * when C8 planes are getting enabled/disabled. 11629 */ 11630 if (c8_planes_changed(pipe_config)) 11631 crtc_state->color_mgmt_changed = true; 11632 11633 if (mode_changed || pipe_config->update_pipe || 11634 crtc_state->color_mgmt_changed) { 11635 ret = intel_color_check(pipe_config); 11636 if (ret) 11637 return ret; 11638 } 11639 11640 ret = 0; 11641 if (dev_priv->display.compute_pipe_wm) { 11642 ret = dev_priv->display.compute_pipe_wm(pipe_config); 11643 if (ret) { 11644 DRM_DEBUG_KMS("Target pipe watermarks are invalid\n"); 11645 return ret; 11646 } 11647 } 11648 11649 if (dev_priv->display.compute_intermediate_wm) { 11650 if (WARN_ON(!dev_priv->display.compute_pipe_wm)) 11651 return 0; 11652 11653 /* 11654 * Calculate 'intermediate' watermarks that satisfy both the 11655 * old state and the new state. We can program these 11656 * immediately. 11657 */ 11658 ret = dev_priv->display.compute_intermediate_wm(pipe_config); 11659 if (ret) { 11660 DRM_DEBUG_KMS("No valid intermediate pipe watermarks are possible\n"); 11661 return ret; 11662 } 11663 } 11664 11665 if (INTEL_GEN(dev_priv) >= 9) { 11666 if (mode_changed || pipe_config->update_pipe) 11667 ret = skl_update_scaler_crtc(pipe_config); 11668 11669 if (!ret) 11670 ret = icl_check_nv12_planes(pipe_config); 11671 if (!ret) 11672 ret = skl_check_pipe_max_pixel_rate(intel_crtc, 11673 pipe_config); 11674 if (!ret) 11675 ret = intel_atomic_setup_scalers(dev_priv, intel_crtc, 11676 pipe_config); 11677 } 11678 11679 if (HAS_IPS(dev_priv)) 11680 pipe_config->ips_enabled = hsw_compute_ips_config(pipe_config); 11681 11682 return ret; 11683 } 11684 11685 static const struct drm_crtc_helper_funcs intel_helper_funcs = { 11686 .atomic_check = intel_crtc_atomic_check, 11687 }; 11688 11689 static void intel_modeset_update_connector_atomic_state(struct drm_device *dev) 11690 { 11691 struct intel_connector *connector; 11692 struct drm_connector_list_iter conn_iter; 11693 11694 drm_connector_list_iter_begin(dev, &conn_iter); 11695 for_each_intel_connector_iter(connector, &conn_iter) { 11696 if (connector->base.state->crtc) 11697 drm_connector_put(&connector->base); 11698 11699 if (connector->base.encoder) { 11700 connector->base.state->best_encoder = 11701 connector->base.encoder; 11702 connector->base.state->crtc = 11703 connector->base.encoder->crtc; 11704 11705 drm_connector_get(&connector->base); 11706 } else { 11707 connector->base.state->best_encoder = NULL; 11708 connector->base.state->crtc = NULL; 11709 } 11710 } 11711 drm_connector_list_iter_end(&conn_iter); 11712 } 11713 11714 static int 11715 compute_sink_pipe_bpp(const struct drm_connector_state *conn_state, 11716 struct intel_crtc_state *pipe_config) 11717 { 11718 struct drm_connector *connector = conn_state->connector; 11719 const struct drm_display_info *info = &connector->display_info; 11720 int bpp; 11721 11722 switch (conn_state->max_bpc) { 11723 case 6 ... 7: 11724 bpp = 6 * 3; 11725 break; 11726 case 8 ... 9: 11727 bpp = 8 * 3; 11728 break; 11729 case 10 ... 11: 11730 bpp = 10 * 3; 11731 break; 11732 case 12: 11733 bpp = 12 * 3; 11734 break; 11735 default: 11736 return -EINVAL; 11737 } 11738 11739 if (bpp < pipe_config->pipe_bpp) { 11740 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Limiting display bpp to %d instead of " 11741 "EDID bpp %d, requested bpp %d, max platform bpp %d\n", 11742 connector->base.id, connector->name, 11743 bpp, 3 * info->bpc, 3 * conn_state->max_requested_bpc, 11744 pipe_config->pipe_bpp); 11745 11746 pipe_config->pipe_bpp = bpp; 11747 } 11748 11749 return 0; 11750 } 11751 11752 static int 11753 compute_baseline_pipe_bpp(struct intel_crtc *crtc, 11754 struct intel_crtc_state *pipe_config) 11755 { 11756 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 11757 struct drm_atomic_state *state = pipe_config->base.state; 11758 struct drm_connector *connector; 11759 struct drm_connector_state *connector_state; 11760 int bpp, i; 11761 11762 if ((IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) || 11763 IS_CHERRYVIEW(dev_priv))) 11764 bpp = 10*3; 11765 else if (INTEL_GEN(dev_priv) >= 5) 11766 bpp = 12*3; 11767 else 11768 bpp = 8*3; 11769 11770 pipe_config->pipe_bpp = bpp; 11771 11772 /* Clamp display bpp to connector max bpp */ 11773 for_each_new_connector_in_state(state, connector, connector_state, i) { 11774 int ret; 11775 11776 if (connector_state->crtc != &crtc->base) 11777 continue; 11778 11779 ret = compute_sink_pipe_bpp(connector_state, pipe_config); 11780 if (ret) 11781 return ret; 11782 } 11783 11784 return 0; 11785 } 11786 11787 static void intel_dump_crtc_timings(const struct drm_display_mode *mode) 11788 { 11789 DRM_DEBUG_KMS("crtc timings: %d %d %d %d %d %d %d %d %d, " 11790 "type: 0x%x flags: 0x%x\n", 11791 mode->crtc_clock, 11792 mode->crtc_hdisplay, mode->crtc_hsync_start, 11793 mode->crtc_hsync_end, mode->crtc_htotal, 11794 mode->crtc_vdisplay, mode->crtc_vsync_start, 11795 mode->crtc_vsync_end, mode->crtc_vtotal, 11796 mode->type, mode->flags); 11797 } 11798 11799 static inline void 11800 intel_dump_m_n_config(const struct intel_crtc_state *pipe_config, 11801 const char *id, unsigned int lane_count, 11802 const struct intel_link_m_n *m_n) 11803 { 11804 DRM_DEBUG_KMS("%s: lanes: %i; gmch_m: %u, gmch_n: %u, link_m: %u, link_n: %u, tu: %u\n", 11805 id, lane_count, 11806 m_n->gmch_m, m_n->gmch_n, 11807 m_n->link_m, m_n->link_n, m_n->tu); 11808 } 11809 11810 static void 11811 intel_dump_infoframe(struct drm_i915_private *dev_priv, 11812 const union hdmi_infoframe *frame) 11813 { 11814 if ((drm_debug & DRM_UT_KMS) == 0) 11815 return; 11816 11817 hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, frame); 11818 } 11819 11820 #define OUTPUT_TYPE(x) [INTEL_OUTPUT_ ## x] = #x 11821 11822 static const char * const output_type_str[] = { 11823 OUTPUT_TYPE(UNUSED), 11824 OUTPUT_TYPE(ANALOG), 11825 OUTPUT_TYPE(DVO), 11826 OUTPUT_TYPE(SDVO), 11827 OUTPUT_TYPE(LVDS), 11828 OUTPUT_TYPE(TVOUT), 11829 OUTPUT_TYPE(HDMI), 11830 OUTPUT_TYPE(DP), 11831 OUTPUT_TYPE(EDP), 11832 OUTPUT_TYPE(DSI), 11833 OUTPUT_TYPE(DDI), 11834 OUTPUT_TYPE(DP_MST), 11835 }; 11836 11837 #undef OUTPUT_TYPE 11838 11839 static void snprintf_output_types(char *buf, size_t len, 11840 unsigned int output_types) 11841 { 11842 char *str = buf; 11843 int i; 11844 11845 str[0] = '\0'; 11846 11847 for (i = 0; i < ARRAY_SIZE(output_type_str); i++) { 11848 int r; 11849 11850 if ((output_types & BIT(i)) == 0) 11851 continue; 11852 11853 r = snprintf(str, len, "%s%s", 11854 str != buf ? "," : "", output_type_str[i]); 11855 if (r >= len) 11856 break; 11857 str += r; 11858 len -= r; 11859 11860 output_types &= ~BIT(i); 11861 } 11862 11863 WARN_ON_ONCE(output_types != 0); 11864 } 11865 11866 static const char * const output_format_str[] = { 11867 [INTEL_OUTPUT_FORMAT_INVALID] = "Invalid", 11868 [INTEL_OUTPUT_FORMAT_RGB] = "RGB", 11869 [INTEL_OUTPUT_FORMAT_YCBCR420] = "YCBCR4:2:0", 11870 [INTEL_OUTPUT_FORMAT_YCBCR444] = "YCBCR4:4:4", 11871 }; 11872 11873 static const char *output_formats(enum intel_output_format format) 11874 { 11875 if (format >= ARRAY_SIZE(output_format_str)) 11876 format = INTEL_OUTPUT_FORMAT_INVALID; 11877 return output_format_str[format]; 11878 } 11879 11880 static void intel_dump_plane_state(const struct intel_plane_state *plane_state) 11881 { 11882 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 11883 const struct drm_framebuffer *fb = plane_state->base.fb; 11884 struct drm_format_name_buf format_name; 11885 11886 if (!fb) { 11887 DRM_DEBUG_KMS("[PLANE:%d:%s] fb: [NOFB], visible: %s\n", 11888 plane->base.base.id, plane->base.name, 11889 yesno(plane_state->base.visible)); 11890 return; 11891 } 11892 11893 DRM_DEBUG_KMS("[PLANE:%d:%s] fb: [FB:%d] %ux%u format = %s, visible: %s\n", 11894 plane->base.base.id, plane->base.name, 11895 fb->base.id, fb->width, fb->height, 11896 drm_get_format_name(fb->format->format, &format_name), 11897 yesno(plane_state->base.visible)); 11898 DRM_DEBUG_KMS("\trotation: 0x%x, scaler: %d\n", 11899 plane_state->base.rotation, plane_state->scaler_id); 11900 if (plane_state->base.visible) 11901 DRM_DEBUG_KMS("\tsrc: " DRM_RECT_FP_FMT " dst: " DRM_RECT_FMT "\n", 11902 DRM_RECT_FP_ARG(&plane_state->base.src), 11903 DRM_RECT_ARG(&plane_state->base.dst)); 11904 } 11905 11906 static void intel_dump_pipe_config(const struct intel_crtc_state *pipe_config, 11907 struct intel_atomic_state *state, 11908 const char *context) 11909 { 11910 struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc); 11911 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 11912 const struct intel_plane_state *plane_state; 11913 struct intel_plane *plane; 11914 char buf[64]; 11915 int i; 11916 11917 DRM_DEBUG_KMS("[CRTC:%d:%s] enable: %s %s\n", 11918 crtc->base.base.id, crtc->base.name, 11919 yesno(pipe_config->base.enable), context); 11920 11921 if (!pipe_config->base.enable) 11922 goto dump_planes; 11923 11924 snprintf_output_types(buf, sizeof(buf), pipe_config->output_types); 11925 DRM_DEBUG_KMS("active: %s, output_types: %s (0x%x), output format: %s\n", 11926 yesno(pipe_config->base.active), 11927 buf, pipe_config->output_types, 11928 output_formats(pipe_config->output_format)); 11929 11930 DRM_DEBUG_KMS("cpu_transcoder: %s, pipe bpp: %i, dithering: %i\n", 11931 transcoder_name(pipe_config->cpu_transcoder), 11932 pipe_config->pipe_bpp, pipe_config->dither); 11933 11934 if (pipe_config->has_pch_encoder) 11935 intel_dump_m_n_config(pipe_config, "fdi", 11936 pipe_config->fdi_lanes, 11937 &pipe_config->fdi_m_n); 11938 11939 if (intel_crtc_has_dp_encoder(pipe_config)) { 11940 intel_dump_m_n_config(pipe_config, "dp m_n", 11941 pipe_config->lane_count, &pipe_config->dp_m_n); 11942 if (pipe_config->has_drrs) 11943 intel_dump_m_n_config(pipe_config, "dp m2_n2", 11944 pipe_config->lane_count, 11945 &pipe_config->dp_m2_n2); 11946 } 11947 11948 DRM_DEBUG_KMS("audio: %i, infoframes: %i, infoframes enabled: 0x%x\n", 11949 pipe_config->has_audio, pipe_config->has_infoframe, 11950 pipe_config->infoframes.enable); 11951 11952 if (pipe_config->infoframes.enable & 11953 intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GENERAL_CONTROL)) 11954 DRM_DEBUG_KMS("GCP: 0x%x\n", pipe_config->infoframes.gcp); 11955 if (pipe_config->infoframes.enable & 11956 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_AVI)) 11957 intel_dump_infoframe(dev_priv, &pipe_config->infoframes.avi); 11958 if (pipe_config->infoframes.enable & 11959 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_SPD)) 11960 intel_dump_infoframe(dev_priv, &pipe_config->infoframes.spd); 11961 if (pipe_config->infoframes.enable & 11962 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_VENDOR)) 11963 intel_dump_infoframe(dev_priv, &pipe_config->infoframes.hdmi); 11964 11965 DRM_DEBUG_KMS("requested mode:\n"); 11966 drm_mode_debug_printmodeline(&pipe_config->base.mode); 11967 DRM_DEBUG_KMS("adjusted mode:\n"); 11968 drm_mode_debug_printmodeline(&pipe_config->base.adjusted_mode); 11969 intel_dump_crtc_timings(&pipe_config->base.adjusted_mode); 11970 DRM_DEBUG_KMS("port clock: %d, pipe src size: %dx%d, pixel rate %d\n", 11971 pipe_config->port_clock, 11972 pipe_config->pipe_src_w, pipe_config->pipe_src_h, 11973 pipe_config->pixel_rate); 11974 11975 if (INTEL_GEN(dev_priv) >= 9) 11976 DRM_DEBUG_KMS("num_scalers: %d, scaler_users: 0x%x, scaler_id: %d\n", 11977 crtc->num_scalers, 11978 pipe_config->scaler_state.scaler_users, 11979 pipe_config->scaler_state.scaler_id); 11980 11981 if (HAS_GMCH(dev_priv)) 11982 DRM_DEBUG_KMS("gmch pfit: control: 0x%08x, ratios: 0x%08x, lvds border: 0x%08x\n", 11983 pipe_config->gmch_pfit.control, 11984 pipe_config->gmch_pfit.pgm_ratios, 11985 pipe_config->gmch_pfit.lvds_border_bits); 11986 else 11987 DRM_DEBUG_KMS("pch pfit: pos: 0x%08x, size: 0x%08x, %s, force thru: %s\n", 11988 pipe_config->pch_pfit.pos, 11989 pipe_config->pch_pfit.size, 11990 enableddisabled(pipe_config->pch_pfit.enabled), 11991 yesno(pipe_config->pch_pfit.force_thru)); 11992 11993 DRM_DEBUG_KMS("ips: %i, double wide: %i\n", 11994 pipe_config->ips_enabled, pipe_config->double_wide); 11995 11996 intel_dpll_dump_hw_state(dev_priv, &pipe_config->dpll_hw_state); 11997 11998 dump_planes: 11999 if (!state) 12000 return; 12001 12002 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 12003 if (plane->pipe == crtc->pipe) 12004 intel_dump_plane_state(plane_state); 12005 } 12006 } 12007 12008 static bool check_digital_port_conflicts(struct intel_atomic_state *state) 12009 { 12010 struct drm_device *dev = state->base.dev; 12011 struct drm_connector *connector; 12012 struct drm_connector_list_iter conn_iter; 12013 unsigned int used_ports = 0; 12014 unsigned int used_mst_ports = 0; 12015 bool ret = true; 12016 12017 /* 12018 * Walk the connector list instead of the encoder 12019 * list to detect the problem on ddi platforms 12020 * where there's just one encoder per digital port. 12021 */ 12022 drm_connector_list_iter_begin(dev, &conn_iter); 12023 drm_for_each_connector_iter(connector, &conn_iter) { 12024 struct drm_connector_state *connector_state; 12025 struct intel_encoder *encoder; 12026 12027 connector_state = 12028 drm_atomic_get_new_connector_state(&state->base, 12029 connector); 12030 if (!connector_state) 12031 connector_state = connector->state; 12032 12033 if (!connector_state->best_encoder) 12034 continue; 12035 12036 encoder = to_intel_encoder(connector_state->best_encoder); 12037 12038 WARN_ON(!connector_state->crtc); 12039 12040 switch (encoder->type) { 12041 unsigned int port_mask; 12042 case INTEL_OUTPUT_DDI: 12043 if (WARN_ON(!HAS_DDI(to_i915(dev)))) 12044 break; 12045 /* else, fall through */ 12046 case INTEL_OUTPUT_DP: 12047 case INTEL_OUTPUT_HDMI: 12048 case INTEL_OUTPUT_EDP: 12049 port_mask = 1 << encoder->port; 12050 12051 /* the same port mustn't appear more than once */ 12052 if (used_ports & port_mask) 12053 ret = false; 12054 12055 used_ports |= port_mask; 12056 break; 12057 case INTEL_OUTPUT_DP_MST: 12058 used_mst_ports |= 12059 1 << encoder->port; 12060 break; 12061 default: 12062 break; 12063 } 12064 } 12065 drm_connector_list_iter_end(&conn_iter); 12066 12067 /* can't mix MST and SST/HDMI on the same port */ 12068 if (used_ports & used_mst_ports) 12069 return false; 12070 12071 return ret; 12072 } 12073 12074 static int 12075 clear_intel_crtc_state(struct intel_crtc_state *crtc_state) 12076 { 12077 struct drm_i915_private *dev_priv = 12078 to_i915(crtc_state->base.crtc->dev); 12079 struct intel_crtc_state *saved_state; 12080 12081 saved_state = kzalloc(sizeof(*saved_state), GFP_KERNEL); 12082 if (!saved_state) 12083 return -ENOMEM; 12084 12085 /* FIXME: before the switch to atomic started, a new pipe_config was 12086 * kzalloc'd. Code that depends on any field being zero should be 12087 * fixed, so that the crtc_state can be safely duplicated. For now, 12088 * only fields that are know to not cause problems are preserved. */ 12089 12090 saved_state->scaler_state = crtc_state->scaler_state; 12091 saved_state->shared_dpll = crtc_state->shared_dpll; 12092 saved_state->dpll_hw_state = crtc_state->dpll_hw_state; 12093 saved_state->crc_enabled = crtc_state->crc_enabled; 12094 if (IS_G4X(dev_priv) || 12095 IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 12096 saved_state->wm = crtc_state->wm; 12097 12098 /* Keep base drm_crtc_state intact, only clear our extended struct */ 12099 BUILD_BUG_ON(offsetof(struct intel_crtc_state, base)); 12100 memcpy(&crtc_state->base + 1, &saved_state->base + 1, 12101 sizeof(*crtc_state) - sizeof(crtc_state->base)); 12102 12103 kfree(saved_state); 12104 return 0; 12105 } 12106 12107 static int 12108 intel_modeset_pipe_config(struct intel_crtc_state *pipe_config) 12109 { 12110 struct drm_crtc *crtc = pipe_config->base.crtc; 12111 struct drm_atomic_state *state = pipe_config->base.state; 12112 struct intel_encoder *encoder; 12113 struct drm_connector *connector; 12114 struct drm_connector_state *connector_state; 12115 int base_bpp, ret; 12116 int i; 12117 bool retry = true; 12118 12119 ret = clear_intel_crtc_state(pipe_config); 12120 if (ret) 12121 return ret; 12122 12123 pipe_config->cpu_transcoder = 12124 (enum transcoder) to_intel_crtc(crtc)->pipe; 12125 12126 /* 12127 * Sanitize sync polarity flags based on requested ones. If neither 12128 * positive or negative polarity is requested, treat this as meaning 12129 * negative polarity. 12130 */ 12131 if (!(pipe_config->base.adjusted_mode.flags & 12132 (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC))) 12133 pipe_config->base.adjusted_mode.flags |= DRM_MODE_FLAG_NHSYNC; 12134 12135 if (!(pipe_config->base.adjusted_mode.flags & 12136 (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC))) 12137 pipe_config->base.adjusted_mode.flags |= DRM_MODE_FLAG_NVSYNC; 12138 12139 ret = compute_baseline_pipe_bpp(to_intel_crtc(crtc), 12140 pipe_config); 12141 if (ret) 12142 return ret; 12143 12144 base_bpp = pipe_config->pipe_bpp; 12145 12146 /* 12147 * Determine the real pipe dimensions. Note that stereo modes can 12148 * increase the actual pipe size due to the frame doubling and 12149 * insertion of additional space for blanks between the frame. This 12150 * is stored in the crtc timings. We use the requested mode to do this 12151 * computation to clearly distinguish it from the adjusted mode, which 12152 * can be changed by the connectors in the below retry loop. 12153 */ 12154 drm_mode_get_hv_timing(&pipe_config->base.mode, 12155 &pipe_config->pipe_src_w, 12156 &pipe_config->pipe_src_h); 12157 12158 for_each_new_connector_in_state(state, connector, connector_state, i) { 12159 if (connector_state->crtc != crtc) 12160 continue; 12161 12162 encoder = to_intel_encoder(connector_state->best_encoder); 12163 12164 if (!check_single_encoder_cloning(state, to_intel_crtc(crtc), encoder)) { 12165 DRM_DEBUG_KMS("rejecting invalid cloning configuration\n"); 12166 return -EINVAL; 12167 } 12168 12169 /* 12170 * Determine output_types before calling the .compute_config() 12171 * hooks so that the hooks can use this information safely. 12172 */ 12173 if (encoder->compute_output_type) 12174 pipe_config->output_types |= 12175 BIT(encoder->compute_output_type(encoder, pipe_config, 12176 connector_state)); 12177 else 12178 pipe_config->output_types |= BIT(encoder->type); 12179 } 12180 12181 encoder_retry: 12182 /* Ensure the port clock defaults are reset when retrying. */ 12183 pipe_config->port_clock = 0; 12184 pipe_config->pixel_multiplier = 1; 12185 12186 /* Fill in default crtc timings, allow encoders to overwrite them. */ 12187 drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode, 12188 CRTC_STEREO_DOUBLE); 12189 12190 /* Pass our mode to the connectors and the CRTC to give them a chance to 12191 * adjust it according to limitations or connector properties, and also 12192 * a chance to reject the mode entirely. 12193 */ 12194 for_each_new_connector_in_state(state, connector, connector_state, i) { 12195 if (connector_state->crtc != crtc) 12196 continue; 12197 12198 encoder = to_intel_encoder(connector_state->best_encoder); 12199 ret = encoder->compute_config(encoder, pipe_config, 12200 connector_state); 12201 if (ret < 0) { 12202 if (ret != -EDEADLK) 12203 DRM_DEBUG_KMS("Encoder config failure: %d\n", 12204 ret); 12205 return ret; 12206 } 12207 } 12208 12209 /* Set default port clock if not overwritten by the encoder. Needs to be 12210 * done afterwards in case the encoder adjusts the mode. */ 12211 if (!pipe_config->port_clock) 12212 pipe_config->port_clock = pipe_config->base.adjusted_mode.crtc_clock 12213 * pipe_config->pixel_multiplier; 12214 12215 ret = intel_crtc_compute_config(to_intel_crtc(crtc), pipe_config); 12216 if (ret == -EDEADLK) 12217 return ret; 12218 if (ret < 0) { 12219 DRM_DEBUG_KMS("CRTC fixup failed\n"); 12220 return ret; 12221 } 12222 12223 if (ret == RETRY) { 12224 if (WARN(!retry, "loop in pipe configuration computation\n")) 12225 return -EINVAL; 12226 12227 DRM_DEBUG_KMS("CRTC bw constrained, retrying\n"); 12228 retry = false; 12229 goto encoder_retry; 12230 } 12231 12232 /* Dithering seems to not pass-through bits correctly when it should, so 12233 * only enable it on 6bpc panels and when its not a compliance 12234 * test requesting 6bpc video pattern. 12235 */ 12236 pipe_config->dither = (pipe_config->pipe_bpp == 6*3) && 12237 !pipe_config->dither_force_disable; 12238 DRM_DEBUG_KMS("hw max bpp: %i, pipe bpp: %i, dithering: %i\n", 12239 base_bpp, pipe_config->pipe_bpp, pipe_config->dither); 12240 12241 return 0; 12242 } 12243 12244 bool intel_fuzzy_clock_check(int clock1, int clock2) 12245 { 12246 int diff; 12247 12248 if (clock1 == clock2) 12249 return true; 12250 12251 if (!clock1 || !clock2) 12252 return false; 12253 12254 diff = abs(clock1 - clock2); 12255 12256 if (((((diff + clock1 + clock2) * 100)) / (clock1 + clock2)) < 105) 12257 return true; 12258 12259 return false; 12260 } 12261 12262 static bool 12263 intel_compare_m_n(unsigned int m, unsigned int n, 12264 unsigned int m2, unsigned int n2, 12265 bool exact) 12266 { 12267 if (m == m2 && n == n2) 12268 return true; 12269 12270 if (exact || !m || !n || !m2 || !n2) 12271 return false; 12272 12273 BUILD_BUG_ON(DATA_LINK_M_N_MASK > INT_MAX); 12274 12275 if (n > n2) { 12276 while (n > n2) { 12277 m2 <<= 1; 12278 n2 <<= 1; 12279 } 12280 } else if (n < n2) { 12281 while (n < n2) { 12282 m <<= 1; 12283 n <<= 1; 12284 } 12285 } 12286 12287 if (n != n2) 12288 return false; 12289 12290 return intel_fuzzy_clock_check(m, m2); 12291 } 12292 12293 static bool 12294 intel_compare_link_m_n(const struct intel_link_m_n *m_n, 12295 const struct intel_link_m_n *m2_n2, 12296 bool exact) 12297 { 12298 return m_n->tu == m2_n2->tu && 12299 intel_compare_m_n(m_n->gmch_m, m_n->gmch_n, 12300 m2_n2->gmch_m, m2_n2->gmch_n, exact) && 12301 intel_compare_m_n(m_n->link_m, m_n->link_n, 12302 m2_n2->link_m, m2_n2->link_n, exact); 12303 } 12304 12305 static bool 12306 intel_compare_infoframe(const union hdmi_infoframe *a, 12307 const union hdmi_infoframe *b) 12308 { 12309 return memcmp(a, b, sizeof(*a)) == 0; 12310 } 12311 12312 static void 12313 pipe_config_infoframe_mismatch(struct drm_i915_private *dev_priv, 12314 bool fastset, const char *name, 12315 const union hdmi_infoframe *a, 12316 const union hdmi_infoframe *b) 12317 { 12318 if (fastset) { 12319 if ((drm_debug & DRM_UT_KMS) == 0) 12320 return; 12321 12322 drm_dbg(DRM_UT_KMS, "fastset mismatch in %s infoframe", name); 12323 drm_dbg(DRM_UT_KMS, "expected:"); 12324 hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, a); 12325 drm_dbg(DRM_UT_KMS, "found"); 12326 hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, b); 12327 } else { 12328 drm_err("mismatch in %s infoframe", name); 12329 drm_err("expected:"); 12330 hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, a); 12331 drm_err("found"); 12332 hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, b); 12333 } 12334 } 12335 12336 static void __printf(3, 4) 12337 pipe_config_mismatch(bool fastset, const char *name, const char *format, ...) 12338 { 12339 struct va_format vaf; 12340 va_list args; 12341 12342 va_start(args, format); 12343 vaf.fmt = format; 12344 vaf.va = &args; 12345 12346 if (fastset) 12347 drm_dbg(DRM_UT_KMS, "fastset mismatch in %s %pV", name, &vaf); 12348 else 12349 drm_err("mismatch in %s %pV", name, &vaf); 12350 12351 va_end(args); 12352 } 12353 12354 static bool fastboot_enabled(struct drm_i915_private *dev_priv) 12355 { 12356 if (i915_modparams.fastboot != -1) 12357 return i915_modparams.fastboot; 12358 12359 /* Enable fastboot by default on Skylake and newer */ 12360 if (INTEL_GEN(dev_priv) >= 9) 12361 return true; 12362 12363 /* Enable fastboot by default on VLV and CHV */ 12364 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 12365 return true; 12366 12367 /* Disabled by default on all others */ 12368 return false; 12369 } 12370 12371 static bool 12372 intel_pipe_config_compare(const struct intel_crtc_state *current_config, 12373 const struct intel_crtc_state *pipe_config, 12374 bool fastset) 12375 { 12376 struct drm_i915_private *dev_priv = to_i915(current_config->base.crtc->dev); 12377 bool ret = true; 12378 bool fixup_inherited = fastset && 12379 (current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) && 12380 !(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED); 12381 12382 if (fixup_inherited && !fastboot_enabled(dev_priv)) { 12383 DRM_DEBUG_KMS("initial modeset and fastboot not set\n"); 12384 ret = false; 12385 } 12386 12387 #define PIPE_CONF_CHECK_X(name) do { \ 12388 if (current_config->name != pipe_config->name) { \ 12389 pipe_config_mismatch(fastset, __stringify(name), \ 12390 "(expected 0x%08x, found 0x%08x)\n", \ 12391 current_config->name, \ 12392 pipe_config->name); \ 12393 ret = false; \ 12394 } \ 12395 } while (0) 12396 12397 #define PIPE_CONF_CHECK_I(name) do { \ 12398 if (current_config->name != pipe_config->name) { \ 12399 pipe_config_mismatch(fastset, __stringify(name), \ 12400 "(expected %i, found %i)\n", \ 12401 current_config->name, \ 12402 pipe_config->name); \ 12403 ret = false; \ 12404 } \ 12405 } while (0) 12406 12407 #define PIPE_CONF_CHECK_BOOL(name) do { \ 12408 if (current_config->name != pipe_config->name) { \ 12409 pipe_config_mismatch(fastset, __stringify(name), \ 12410 "(expected %s, found %s)\n", \ 12411 yesno(current_config->name), \ 12412 yesno(pipe_config->name)); \ 12413 ret = false; \ 12414 } \ 12415 } while (0) 12416 12417 /* 12418 * Checks state where we only read out the enabling, but not the entire 12419 * state itself (like full infoframes or ELD for audio). These states 12420 * require a full modeset on bootup to fix up. 12421 */ 12422 #define PIPE_CONF_CHECK_BOOL_INCOMPLETE(name) do { \ 12423 if (!fixup_inherited || (!current_config->name && !pipe_config->name)) { \ 12424 PIPE_CONF_CHECK_BOOL(name); \ 12425 } else { \ 12426 pipe_config_mismatch(fastset, __stringify(name), \ 12427 "unable to verify whether state matches exactly, forcing modeset (expected %s, found %s)\n", \ 12428 yesno(current_config->name), \ 12429 yesno(pipe_config->name)); \ 12430 ret = false; \ 12431 } \ 12432 } while (0) 12433 12434 #define PIPE_CONF_CHECK_P(name) do { \ 12435 if (current_config->name != pipe_config->name) { \ 12436 pipe_config_mismatch(fastset, __stringify(name), \ 12437 "(expected %p, found %p)\n", \ 12438 current_config->name, \ 12439 pipe_config->name); \ 12440 ret = false; \ 12441 } \ 12442 } while (0) 12443 12444 #define PIPE_CONF_CHECK_M_N(name) do { \ 12445 if (!intel_compare_link_m_n(¤t_config->name, \ 12446 &pipe_config->name,\ 12447 !fastset)) { \ 12448 pipe_config_mismatch(fastset, __stringify(name), \ 12449 "(expected tu %i gmch %i/%i link %i/%i, " \ 12450 "found tu %i, gmch %i/%i link %i/%i)\n", \ 12451 current_config->name.tu, \ 12452 current_config->name.gmch_m, \ 12453 current_config->name.gmch_n, \ 12454 current_config->name.link_m, \ 12455 current_config->name.link_n, \ 12456 pipe_config->name.tu, \ 12457 pipe_config->name.gmch_m, \ 12458 pipe_config->name.gmch_n, \ 12459 pipe_config->name.link_m, \ 12460 pipe_config->name.link_n); \ 12461 ret = false; \ 12462 } \ 12463 } while (0) 12464 12465 /* This is required for BDW+ where there is only one set of registers for 12466 * switching between high and low RR. 12467 * This macro can be used whenever a comparison has to be made between one 12468 * hw state and multiple sw state variables. 12469 */ 12470 #define PIPE_CONF_CHECK_M_N_ALT(name, alt_name) do { \ 12471 if (!intel_compare_link_m_n(¤t_config->name, \ 12472 &pipe_config->name, !fastset) && \ 12473 !intel_compare_link_m_n(¤t_config->alt_name, \ 12474 &pipe_config->name, !fastset)) { \ 12475 pipe_config_mismatch(fastset, __stringify(name), \ 12476 "(expected tu %i gmch %i/%i link %i/%i, " \ 12477 "or tu %i gmch %i/%i link %i/%i, " \ 12478 "found tu %i, gmch %i/%i link %i/%i)\n", \ 12479 current_config->name.tu, \ 12480 current_config->name.gmch_m, \ 12481 current_config->name.gmch_n, \ 12482 current_config->name.link_m, \ 12483 current_config->name.link_n, \ 12484 current_config->alt_name.tu, \ 12485 current_config->alt_name.gmch_m, \ 12486 current_config->alt_name.gmch_n, \ 12487 current_config->alt_name.link_m, \ 12488 current_config->alt_name.link_n, \ 12489 pipe_config->name.tu, \ 12490 pipe_config->name.gmch_m, \ 12491 pipe_config->name.gmch_n, \ 12492 pipe_config->name.link_m, \ 12493 pipe_config->name.link_n); \ 12494 ret = false; \ 12495 } \ 12496 } while (0) 12497 12498 #define PIPE_CONF_CHECK_FLAGS(name, mask) do { \ 12499 if ((current_config->name ^ pipe_config->name) & (mask)) { \ 12500 pipe_config_mismatch(fastset, __stringify(name), \ 12501 "(%x) (expected %i, found %i)\n", \ 12502 (mask), \ 12503 current_config->name & (mask), \ 12504 pipe_config->name & (mask)); \ 12505 ret = false; \ 12506 } \ 12507 } while (0) 12508 12509 #define PIPE_CONF_CHECK_CLOCK_FUZZY(name) do { \ 12510 if (!intel_fuzzy_clock_check(current_config->name, pipe_config->name)) { \ 12511 pipe_config_mismatch(fastset, __stringify(name), \ 12512 "(expected %i, found %i)\n", \ 12513 current_config->name, \ 12514 pipe_config->name); \ 12515 ret = false; \ 12516 } \ 12517 } while (0) 12518 12519 #define PIPE_CONF_CHECK_INFOFRAME(name) do { \ 12520 if (!intel_compare_infoframe(¤t_config->infoframes.name, \ 12521 &pipe_config->infoframes.name)) { \ 12522 pipe_config_infoframe_mismatch(dev_priv, fastset, __stringify(name), \ 12523 ¤t_config->infoframes.name, \ 12524 &pipe_config->infoframes.name); \ 12525 ret = false; \ 12526 } \ 12527 } while (0) 12528 12529 #define PIPE_CONF_QUIRK(quirk) \ 12530 ((current_config->quirks | pipe_config->quirks) & (quirk)) 12531 12532 PIPE_CONF_CHECK_I(cpu_transcoder); 12533 12534 PIPE_CONF_CHECK_BOOL(has_pch_encoder); 12535 PIPE_CONF_CHECK_I(fdi_lanes); 12536 PIPE_CONF_CHECK_M_N(fdi_m_n); 12537 12538 PIPE_CONF_CHECK_I(lane_count); 12539 PIPE_CONF_CHECK_X(lane_lat_optim_mask); 12540 12541 if (INTEL_GEN(dev_priv) < 8) { 12542 PIPE_CONF_CHECK_M_N(dp_m_n); 12543 12544 if (current_config->has_drrs) 12545 PIPE_CONF_CHECK_M_N(dp_m2_n2); 12546 } else 12547 PIPE_CONF_CHECK_M_N_ALT(dp_m_n, dp_m2_n2); 12548 12549 PIPE_CONF_CHECK_X(output_types); 12550 12551 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_hdisplay); 12552 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_htotal); 12553 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_hblank_start); 12554 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_hblank_end); 12555 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_hsync_start); 12556 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_hsync_end); 12557 12558 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vdisplay); 12559 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vtotal); 12560 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vblank_start); 12561 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vblank_end); 12562 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vsync_start); 12563 PIPE_CONF_CHECK_I(base.adjusted_mode.crtc_vsync_end); 12564 12565 PIPE_CONF_CHECK_I(pixel_multiplier); 12566 PIPE_CONF_CHECK_I(output_format); 12567 PIPE_CONF_CHECK_BOOL(has_hdmi_sink); 12568 if ((INTEL_GEN(dev_priv) < 8 && !IS_HASWELL(dev_priv)) || 12569 IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 12570 PIPE_CONF_CHECK_BOOL(limited_color_range); 12571 12572 PIPE_CONF_CHECK_BOOL(hdmi_scrambling); 12573 PIPE_CONF_CHECK_BOOL(hdmi_high_tmds_clock_ratio); 12574 PIPE_CONF_CHECK_BOOL(has_infoframe); 12575 12576 PIPE_CONF_CHECK_BOOL_INCOMPLETE(has_audio); 12577 12578 PIPE_CONF_CHECK_FLAGS(base.adjusted_mode.flags, 12579 DRM_MODE_FLAG_INTERLACE); 12580 12581 if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS)) { 12582 PIPE_CONF_CHECK_FLAGS(base.adjusted_mode.flags, 12583 DRM_MODE_FLAG_PHSYNC); 12584 PIPE_CONF_CHECK_FLAGS(base.adjusted_mode.flags, 12585 DRM_MODE_FLAG_NHSYNC); 12586 PIPE_CONF_CHECK_FLAGS(base.adjusted_mode.flags, 12587 DRM_MODE_FLAG_PVSYNC); 12588 PIPE_CONF_CHECK_FLAGS(base.adjusted_mode.flags, 12589 DRM_MODE_FLAG_NVSYNC); 12590 } 12591 12592 PIPE_CONF_CHECK_X(gmch_pfit.control); 12593 /* pfit ratios are autocomputed by the hw on gen4+ */ 12594 if (INTEL_GEN(dev_priv) < 4) 12595 PIPE_CONF_CHECK_X(gmch_pfit.pgm_ratios); 12596 PIPE_CONF_CHECK_X(gmch_pfit.lvds_border_bits); 12597 12598 /* 12599 * Changing the EDP transcoder input mux 12600 * (A_ONOFF vs. A_ON) requires a full modeset. 12601 */ 12602 PIPE_CONF_CHECK_BOOL(pch_pfit.force_thru); 12603 12604 if (!fastset) { 12605 PIPE_CONF_CHECK_I(pipe_src_w); 12606 PIPE_CONF_CHECK_I(pipe_src_h); 12607 12608 PIPE_CONF_CHECK_BOOL(pch_pfit.enabled); 12609 if (current_config->pch_pfit.enabled) { 12610 PIPE_CONF_CHECK_X(pch_pfit.pos); 12611 PIPE_CONF_CHECK_X(pch_pfit.size); 12612 } 12613 12614 PIPE_CONF_CHECK_I(scaler_state.scaler_id); 12615 PIPE_CONF_CHECK_CLOCK_FUZZY(pixel_rate); 12616 12617 PIPE_CONF_CHECK_X(gamma_mode); 12618 if (IS_CHERRYVIEW(dev_priv)) 12619 PIPE_CONF_CHECK_X(cgm_mode); 12620 else 12621 PIPE_CONF_CHECK_X(csc_mode); 12622 PIPE_CONF_CHECK_BOOL(gamma_enable); 12623 PIPE_CONF_CHECK_BOOL(csc_enable); 12624 } 12625 12626 PIPE_CONF_CHECK_BOOL(double_wide); 12627 12628 PIPE_CONF_CHECK_P(shared_dpll); 12629 PIPE_CONF_CHECK_X(dpll_hw_state.dpll); 12630 PIPE_CONF_CHECK_X(dpll_hw_state.dpll_md); 12631 PIPE_CONF_CHECK_X(dpll_hw_state.fp0); 12632 PIPE_CONF_CHECK_X(dpll_hw_state.fp1); 12633 PIPE_CONF_CHECK_X(dpll_hw_state.wrpll); 12634 PIPE_CONF_CHECK_X(dpll_hw_state.spll); 12635 PIPE_CONF_CHECK_X(dpll_hw_state.ctrl1); 12636 PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr1); 12637 PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr2); 12638 PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr0); 12639 PIPE_CONF_CHECK_X(dpll_hw_state.ebb0); 12640 PIPE_CONF_CHECK_X(dpll_hw_state.ebb4); 12641 PIPE_CONF_CHECK_X(dpll_hw_state.pll0); 12642 PIPE_CONF_CHECK_X(dpll_hw_state.pll1); 12643 PIPE_CONF_CHECK_X(dpll_hw_state.pll2); 12644 PIPE_CONF_CHECK_X(dpll_hw_state.pll3); 12645 PIPE_CONF_CHECK_X(dpll_hw_state.pll6); 12646 PIPE_CONF_CHECK_X(dpll_hw_state.pll8); 12647 PIPE_CONF_CHECK_X(dpll_hw_state.pll9); 12648 PIPE_CONF_CHECK_X(dpll_hw_state.pll10); 12649 PIPE_CONF_CHECK_X(dpll_hw_state.pcsdw12); 12650 PIPE_CONF_CHECK_X(dpll_hw_state.mg_refclkin_ctl); 12651 PIPE_CONF_CHECK_X(dpll_hw_state.mg_clktop2_coreclkctl1); 12652 PIPE_CONF_CHECK_X(dpll_hw_state.mg_clktop2_hsclkctl); 12653 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_div0); 12654 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_div1); 12655 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_lf); 12656 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_frac_lock); 12657 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_ssc); 12658 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_bias); 12659 PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_tdc_coldst_bias); 12660 12661 PIPE_CONF_CHECK_X(dsi_pll.ctrl); 12662 PIPE_CONF_CHECK_X(dsi_pll.div); 12663 12664 if (IS_G4X(dev_priv) || INTEL_GEN(dev_priv) >= 5) 12665 PIPE_CONF_CHECK_I(pipe_bpp); 12666 12667 PIPE_CONF_CHECK_CLOCK_FUZZY(base.adjusted_mode.crtc_clock); 12668 PIPE_CONF_CHECK_CLOCK_FUZZY(port_clock); 12669 12670 PIPE_CONF_CHECK_I(min_voltage_level); 12671 12672 PIPE_CONF_CHECK_X(infoframes.enable); 12673 PIPE_CONF_CHECK_X(infoframes.gcp); 12674 PIPE_CONF_CHECK_INFOFRAME(avi); 12675 PIPE_CONF_CHECK_INFOFRAME(spd); 12676 PIPE_CONF_CHECK_INFOFRAME(hdmi); 12677 PIPE_CONF_CHECK_INFOFRAME(drm); 12678 12679 #undef PIPE_CONF_CHECK_X 12680 #undef PIPE_CONF_CHECK_I 12681 #undef PIPE_CONF_CHECK_BOOL 12682 #undef PIPE_CONF_CHECK_BOOL_INCOMPLETE 12683 #undef PIPE_CONF_CHECK_P 12684 #undef PIPE_CONF_CHECK_FLAGS 12685 #undef PIPE_CONF_CHECK_CLOCK_FUZZY 12686 #undef PIPE_CONF_QUIRK 12687 12688 return ret; 12689 } 12690 12691 static void intel_pipe_config_sanity_check(struct drm_i915_private *dev_priv, 12692 const struct intel_crtc_state *pipe_config) 12693 { 12694 if (pipe_config->has_pch_encoder) { 12695 int fdi_dotclock = intel_dotclock_calculate(intel_fdi_link_freq(dev_priv, pipe_config), 12696 &pipe_config->fdi_m_n); 12697 int dotclock = pipe_config->base.adjusted_mode.crtc_clock; 12698 12699 /* 12700 * FDI already provided one idea for the dotclock. 12701 * Yell if the encoder disagrees. 12702 */ 12703 WARN(!intel_fuzzy_clock_check(fdi_dotclock, dotclock), 12704 "FDI dotclock and encoder dotclock mismatch, fdi: %i, encoder: %i\n", 12705 fdi_dotclock, dotclock); 12706 } 12707 } 12708 12709 static void verify_wm_state(struct drm_crtc *crtc, 12710 struct drm_crtc_state *new_state) 12711 { 12712 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 12713 struct skl_hw_state { 12714 struct skl_ddb_entry ddb_y[I915_MAX_PLANES]; 12715 struct skl_ddb_entry ddb_uv[I915_MAX_PLANES]; 12716 struct skl_ddb_allocation ddb; 12717 struct skl_pipe_wm wm; 12718 } *hw; 12719 struct skl_ddb_allocation *sw_ddb; 12720 struct skl_pipe_wm *sw_wm; 12721 struct skl_ddb_entry *hw_ddb_entry, *sw_ddb_entry; 12722 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 12723 const enum pipe pipe = intel_crtc->pipe; 12724 int plane, level, max_level = ilk_wm_max_level(dev_priv); 12725 12726 if (INTEL_GEN(dev_priv) < 9 || !new_state->active) 12727 return; 12728 12729 hw = kzalloc(sizeof(*hw), GFP_KERNEL); 12730 if (!hw) 12731 return; 12732 12733 skl_pipe_wm_get_hw_state(intel_crtc, &hw->wm); 12734 sw_wm = &to_intel_crtc_state(new_state)->wm.skl.optimal; 12735 12736 skl_pipe_ddb_get_hw_state(intel_crtc, hw->ddb_y, hw->ddb_uv); 12737 12738 skl_ddb_get_hw_state(dev_priv, &hw->ddb); 12739 sw_ddb = &dev_priv->wm.skl_hw.ddb; 12740 12741 if (INTEL_GEN(dev_priv) >= 11 && 12742 hw->ddb.enabled_slices != sw_ddb->enabled_slices) 12743 DRM_ERROR("mismatch in DBUF Slices (expected %u, got %u)\n", 12744 sw_ddb->enabled_slices, 12745 hw->ddb.enabled_slices); 12746 12747 /* planes */ 12748 for_each_universal_plane(dev_priv, pipe, plane) { 12749 struct skl_plane_wm *hw_plane_wm, *sw_plane_wm; 12750 12751 hw_plane_wm = &hw->wm.planes[plane]; 12752 sw_plane_wm = &sw_wm->planes[plane]; 12753 12754 /* Watermarks */ 12755 for (level = 0; level <= max_level; level++) { 12756 if (skl_wm_level_equals(&hw_plane_wm->wm[level], 12757 &sw_plane_wm->wm[level])) 12758 continue; 12759 12760 DRM_ERROR("mismatch in WM pipe %c plane %d level %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n", 12761 pipe_name(pipe), plane + 1, level, 12762 sw_plane_wm->wm[level].plane_en, 12763 sw_plane_wm->wm[level].plane_res_b, 12764 sw_plane_wm->wm[level].plane_res_l, 12765 hw_plane_wm->wm[level].plane_en, 12766 hw_plane_wm->wm[level].plane_res_b, 12767 hw_plane_wm->wm[level].plane_res_l); 12768 } 12769 12770 if (!skl_wm_level_equals(&hw_plane_wm->trans_wm, 12771 &sw_plane_wm->trans_wm)) { 12772 DRM_ERROR("mismatch in trans WM pipe %c plane %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n", 12773 pipe_name(pipe), plane + 1, 12774 sw_plane_wm->trans_wm.plane_en, 12775 sw_plane_wm->trans_wm.plane_res_b, 12776 sw_plane_wm->trans_wm.plane_res_l, 12777 hw_plane_wm->trans_wm.plane_en, 12778 hw_plane_wm->trans_wm.plane_res_b, 12779 hw_plane_wm->trans_wm.plane_res_l); 12780 } 12781 12782 /* DDB */ 12783 hw_ddb_entry = &hw->ddb_y[plane]; 12784 sw_ddb_entry = &to_intel_crtc_state(new_state)->wm.skl.plane_ddb_y[plane]; 12785 12786 if (!skl_ddb_entry_equal(hw_ddb_entry, sw_ddb_entry)) { 12787 DRM_ERROR("mismatch in DDB state pipe %c plane %d (expected (%u,%u), found (%u,%u))\n", 12788 pipe_name(pipe), plane + 1, 12789 sw_ddb_entry->start, sw_ddb_entry->end, 12790 hw_ddb_entry->start, hw_ddb_entry->end); 12791 } 12792 } 12793 12794 /* 12795 * cursor 12796 * If the cursor plane isn't active, we may not have updated it's ddb 12797 * allocation. In that case since the ddb allocation will be updated 12798 * once the plane becomes visible, we can skip this check 12799 */ 12800 if (1) { 12801 struct skl_plane_wm *hw_plane_wm, *sw_plane_wm; 12802 12803 hw_plane_wm = &hw->wm.planes[PLANE_CURSOR]; 12804 sw_plane_wm = &sw_wm->planes[PLANE_CURSOR]; 12805 12806 /* Watermarks */ 12807 for (level = 0; level <= max_level; level++) { 12808 if (skl_wm_level_equals(&hw_plane_wm->wm[level], 12809 &sw_plane_wm->wm[level])) 12810 continue; 12811 12812 DRM_ERROR("mismatch in WM pipe %c cursor level %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n", 12813 pipe_name(pipe), level, 12814 sw_plane_wm->wm[level].plane_en, 12815 sw_plane_wm->wm[level].plane_res_b, 12816 sw_plane_wm->wm[level].plane_res_l, 12817 hw_plane_wm->wm[level].plane_en, 12818 hw_plane_wm->wm[level].plane_res_b, 12819 hw_plane_wm->wm[level].plane_res_l); 12820 } 12821 12822 if (!skl_wm_level_equals(&hw_plane_wm->trans_wm, 12823 &sw_plane_wm->trans_wm)) { 12824 DRM_ERROR("mismatch in trans WM pipe %c cursor (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n", 12825 pipe_name(pipe), 12826 sw_plane_wm->trans_wm.plane_en, 12827 sw_plane_wm->trans_wm.plane_res_b, 12828 sw_plane_wm->trans_wm.plane_res_l, 12829 hw_plane_wm->trans_wm.plane_en, 12830 hw_plane_wm->trans_wm.plane_res_b, 12831 hw_plane_wm->trans_wm.plane_res_l); 12832 } 12833 12834 /* DDB */ 12835 hw_ddb_entry = &hw->ddb_y[PLANE_CURSOR]; 12836 sw_ddb_entry = &to_intel_crtc_state(new_state)->wm.skl.plane_ddb_y[PLANE_CURSOR]; 12837 12838 if (!skl_ddb_entry_equal(hw_ddb_entry, sw_ddb_entry)) { 12839 DRM_ERROR("mismatch in DDB state pipe %c cursor (expected (%u,%u), found (%u,%u))\n", 12840 pipe_name(pipe), 12841 sw_ddb_entry->start, sw_ddb_entry->end, 12842 hw_ddb_entry->start, hw_ddb_entry->end); 12843 } 12844 } 12845 12846 kfree(hw); 12847 } 12848 12849 static void 12850 verify_connector_state(struct drm_device *dev, 12851 struct drm_atomic_state *state, 12852 struct drm_crtc *crtc) 12853 { 12854 struct drm_connector *connector; 12855 struct drm_connector_state *new_conn_state; 12856 int i; 12857 12858 for_each_new_connector_in_state(state, connector, new_conn_state, i) { 12859 struct drm_encoder *encoder = connector->encoder; 12860 struct drm_crtc_state *crtc_state = NULL; 12861 12862 if (new_conn_state->crtc != crtc) 12863 continue; 12864 12865 if (crtc) 12866 crtc_state = drm_atomic_get_new_crtc_state(state, new_conn_state->crtc); 12867 12868 intel_connector_verify_state(crtc_state, new_conn_state); 12869 12870 I915_STATE_WARN(new_conn_state->best_encoder != encoder, 12871 "connector's atomic encoder doesn't match legacy encoder\n"); 12872 } 12873 } 12874 12875 static void 12876 verify_encoder_state(struct drm_device *dev, struct drm_atomic_state *state) 12877 { 12878 struct intel_encoder *encoder; 12879 struct drm_connector *connector; 12880 struct drm_connector_state *old_conn_state, *new_conn_state; 12881 int i; 12882 12883 for_each_intel_encoder(dev, encoder) { 12884 bool enabled = false, found = false; 12885 enum pipe pipe; 12886 12887 DRM_DEBUG_KMS("[ENCODER:%d:%s]\n", 12888 encoder->base.base.id, 12889 encoder->base.name); 12890 12891 for_each_oldnew_connector_in_state(state, connector, old_conn_state, 12892 new_conn_state, i) { 12893 if (old_conn_state->best_encoder == &encoder->base) 12894 found = true; 12895 12896 if (new_conn_state->best_encoder != &encoder->base) 12897 continue; 12898 found = enabled = true; 12899 12900 I915_STATE_WARN(new_conn_state->crtc != 12901 encoder->base.crtc, 12902 "connector's crtc doesn't match encoder crtc\n"); 12903 } 12904 12905 if (!found) 12906 continue; 12907 12908 I915_STATE_WARN(!!encoder->base.crtc != enabled, 12909 "encoder's enabled state mismatch " 12910 "(expected %i, found %i)\n", 12911 !!encoder->base.crtc, enabled); 12912 12913 if (!encoder->base.crtc) { 12914 bool active; 12915 12916 active = encoder->get_hw_state(encoder, &pipe); 12917 I915_STATE_WARN(active, 12918 "encoder detached but still enabled on pipe %c.\n", 12919 pipe_name(pipe)); 12920 } 12921 } 12922 } 12923 12924 static void 12925 verify_crtc_state(struct drm_crtc *crtc, 12926 struct drm_crtc_state *old_crtc_state, 12927 struct drm_crtc_state *new_crtc_state) 12928 { 12929 struct drm_device *dev = crtc->dev; 12930 struct drm_i915_private *dev_priv = to_i915(dev); 12931 struct intel_encoder *encoder; 12932 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 12933 struct intel_crtc_state *pipe_config, *sw_config; 12934 struct drm_atomic_state *old_state; 12935 bool active; 12936 12937 old_state = old_crtc_state->state; 12938 __drm_atomic_helper_crtc_destroy_state(old_crtc_state); 12939 pipe_config = to_intel_crtc_state(old_crtc_state); 12940 memset(pipe_config, 0, sizeof(*pipe_config)); 12941 pipe_config->base.crtc = crtc; 12942 pipe_config->base.state = old_state; 12943 12944 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); 12945 12946 active = dev_priv->display.get_pipe_config(intel_crtc, pipe_config); 12947 12948 /* we keep both pipes enabled on 830 */ 12949 if (IS_I830(dev_priv)) 12950 active = new_crtc_state->active; 12951 12952 I915_STATE_WARN(new_crtc_state->active != active, 12953 "crtc active state doesn't match with hw state " 12954 "(expected %i, found %i)\n", new_crtc_state->active, active); 12955 12956 I915_STATE_WARN(intel_crtc->active != new_crtc_state->active, 12957 "transitional active state does not match atomic hw state " 12958 "(expected %i, found %i)\n", new_crtc_state->active, intel_crtc->active); 12959 12960 for_each_encoder_on_crtc(dev, crtc, encoder) { 12961 enum pipe pipe; 12962 12963 active = encoder->get_hw_state(encoder, &pipe); 12964 I915_STATE_WARN(active != new_crtc_state->active, 12965 "[ENCODER:%i] active %i with crtc active %i\n", 12966 encoder->base.base.id, active, new_crtc_state->active); 12967 12968 I915_STATE_WARN(active && intel_crtc->pipe != pipe, 12969 "Encoder connected to wrong pipe %c\n", 12970 pipe_name(pipe)); 12971 12972 if (active) 12973 encoder->get_config(encoder, pipe_config); 12974 } 12975 12976 intel_crtc_compute_pixel_rate(pipe_config); 12977 12978 if (!new_crtc_state->active) 12979 return; 12980 12981 intel_pipe_config_sanity_check(dev_priv, pipe_config); 12982 12983 sw_config = to_intel_crtc_state(new_crtc_state); 12984 if (!intel_pipe_config_compare(sw_config, pipe_config, false)) { 12985 I915_STATE_WARN(1, "pipe state doesn't match!\n"); 12986 intel_dump_pipe_config(pipe_config, NULL, "[hw state]"); 12987 intel_dump_pipe_config(sw_config, NULL, "[sw state]"); 12988 } 12989 } 12990 12991 static void 12992 intel_verify_planes(struct intel_atomic_state *state) 12993 { 12994 struct intel_plane *plane; 12995 const struct intel_plane_state *plane_state; 12996 int i; 12997 12998 for_each_new_intel_plane_in_state(state, plane, 12999 plane_state, i) 13000 assert_plane(plane, plane_state->slave || 13001 plane_state->base.visible); 13002 } 13003 13004 static void 13005 verify_single_dpll_state(struct drm_i915_private *dev_priv, 13006 struct intel_shared_dpll *pll, 13007 struct drm_crtc *crtc, 13008 struct drm_crtc_state *new_state) 13009 { 13010 struct intel_dpll_hw_state dpll_hw_state; 13011 unsigned int crtc_mask; 13012 bool active; 13013 13014 memset(&dpll_hw_state, 0, sizeof(dpll_hw_state)); 13015 13016 DRM_DEBUG_KMS("%s\n", pll->info->name); 13017 13018 active = pll->info->funcs->get_hw_state(dev_priv, pll, &dpll_hw_state); 13019 13020 if (!(pll->info->flags & INTEL_DPLL_ALWAYS_ON)) { 13021 I915_STATE_WARN(!pll->on && pll->active_mask, 13022 "pll in active use but not on in sw tracking\n"); 13023 I915_STATE_WARN(pll->on && !pll->active_mask, 13024 "pll is on but not used by any active crtc\n"); 13025 I915_STATE_WARN(pll->on != active, 13026 "pll on state mismatch (expected %i, found %i)\n", 13027 pll->on, active); 13028 } 13029 13030 if (!crtc) { 13031 I915_STATE_WARN(pll->active_mask & ~pll->state.crtc_mask, 13032 "more active pll users than references: %x vs %x\n", 13033 pll->active_mask, pll->state.crtc_mask); 13034 13035 return; 13036 } 13037 13038 crtc_mask = drm_crtc_mask(crtc); 13039 13040 if (new_state->active) 13041 I915_STATE_WARN(!(pll->active_mask & crtc_mask), 13042 "pll active mismatch (expected pipe %c in active mask 0x%02x)\n", 13043 pipe_name(drm_crtc_index(crtc)), pll->active_mask); 13044 else 13045 I915_STATE_WARN(pll->active_mask & crtc_mask, 13046 "pll active mismatch (didn't expect pipe %c in active mask 0x%02x)\n", 13047 pipe_name(drm_crtc_index(crtc)), pll->active_mask); 13048 13049 I915_STATE_WARN(!(pll->state.crtc_mask & crtc_mask), 13050 "pll enabled crtcs mismatch (expected 0x%x in 0x%02x)\n", 13051 crtc_mask, pll->state.crtc_mask); 13052 13053 I915_STATE_WARN(pll->on && memcmp(&pll->state.hw_state, 13054 &dpll_hw_state, 13055 sizeof(dpll_hw_state)), 13056 "pll hw state mismatch\n"); 13057 } 13058 13059 static void 13060 verify_shared_dpll_state(struct drm_device *dev, struct drm_crtc *crtc, 13061 struct drm_crtc_state *old_crtc_state, 13062 struct drm_crtc_state *new_crtc_state) 13063 { 13064 struct drm_i915_private *dev_priv = to_i915(dev); 13065 struct intel_crtc_state *old_state = to_intel_crtc_state(old_crtc_state); 13066 struct intel_crtc_state *new_state = to_intel_crtc_state(new_crtc_state); 13067 13068 if (new_state->shared_dpll) 13069 verify_single_dpll_state(dev_priv, new_state->shared_dpll, crtc, new_crtc_state); 13070 13071 if (old_state->shared_dpll && 13072 old_state->shared_dpll != new_state->shared_dpll) { 13073 unsigned int crtc_mask = drm_crtc_mask(crtc); 13074 struct intel_shared_dpll *pll = old_state->shared_dpll; 13075 13076 I915_STATE_WARN(pll->active_mask & crtc_mask, 13077 "pll active mismatch (didn't expect pipe %c in active mask)\n", 13078 pipe_name(drm_crtc_index(crtc))); 13079 I915_STATE_WARN(pll->state.crtc_mask & crtc_mask, 13080 "pll enabled crtcs mismatch (found %x in enabled mask)\n", 13081 pipe_name(drm_crtc_index(crtc))); 13082 } 13083 } 13084 13085 static void 13086 intel_modeset_verify_crtc(struct drm_crtc *crtc, 13087 struct drm_atomic_state *state, 13088 struct drm_crtc_state *old_state, 13089 struct drm_crtc_state *new_state) 13090 { 13091 if (!needs_modeset(new_state) && 13092 !to_intel_crtc_state(new_state)->update_pipe) 13093 return; 13094 13095 verify_wm_state(crtc, new_state); 13096 verify_connector_state(crtc->dev, state, crtc); 13097 verify_crtc_state(crtc, old_state, new_state); 13098 verify_shared_dpll_state(crtc->dev, crtc, old_state, new_state); 13099 } 13100 13101 static void 13102 verify_disabled_dpll_state(struct drm_device *dev) 13103 { 13104 struct drm_i915_private *dev_priv = to_i915(dev); 13105 int i; 13106 13107 for (i = 0; i < dev_priv->num_shared_dpll; i++) 13108 verify_single_dpll_state(dev_priv, &dev_priv->shared_dplls[i], NULL, NULL); 13109 } 13110 13111 static void 13112 intel_modeset_verify_disabled(struct drm_device *dev, 13113 struct drm_atomic_state *state) 13114 { 13115 verify_encoder_state(dev, state); 13116 verify_connector_state(dev, state, NULL); 13117 verify_disabled_dpll_state(dev); 13118 } 13119 13120 static void update_scanline_offset(const struct intel_crtc_state *crtc_state) 13121 { 13122 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 13123 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 13124 13125 /* 13126 * The scanline counter increments at the leading edge of hsync. 13127 * 13128 * On most platforms it starts counting from vtotal-1 on the 13129 * first active line. That means the scanline counter value is 13130 * always one less than what we would expect. Ie. just after 13131 * start of vblank, which also occurs at start of hsync (on the 13132 * last active line), the scanline counter will read vblank_start-1. 13133 * 13134 * On gen2 the scanline counter starts counting from 1 instead 13135 * of vtotal-1, so we have to subtract one (or rather add vtotal-1 13136 * to keep the value positive), instead of adding one. 13137 * 13138 * On HSW+ the behaviour of the scanline counter depends on the output 13139 * type. For DP ports it behaves like most other platforms, but on HDMI 13140 * there's an extra 1 line difference. So we need to add two instead of 13141 * one to the value. 13142 * 13143 * On VLV/CHV DSI the scanline counter would appear to increment 13144 * approx. 1/3 of a scanline before start of vblank. Unfortunately 13145 * that means we can't tell whether we're in vblank or not while 13146 * we're on that particular line. We must still set scanline_offset 13147 * to 1 so that the vblank timestamps come out correct when we query 13148 * the scanline counter from within the vblank interrupt handler. 13149 * However if queried just before the start of vblank we'll get an 13150 * answer that's slightly in the future. 13151 */ 13152 if (IS_GEN(dev_priv, 2)) { 13153 const struct drm_display_mode *adjusted_mode = &crtc_state->base.adjusted_mode; 13154 int vtotal; 13155 13156 vtotal = adjusted_mode->crtc_vtotal; 13157 if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) 13158 vtotal /= 2; 13159 13160 crtc->scanline_offset = vtotal - 1; 13161 } else if (HAS_DDI(dev_priv) && 13162 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) { 13163 crtc->scanline_offset = 2; 13164 } else 13165 crtc->scanline_offset = 1; 13166 } 13167 13168 static void intel_modeset_clear_plls(struct intel_atomic_state *state) 13169 { 13170 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 13171 struct intel_crtc_state *old_crtc_state, *new_crtc_state; 13172 struct intel_crtc *crtc; 13173 int i; 13174 13175 if (!dev_priv->display.crtc_compute_clock) 13176 return; 13177 13178 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13179 new_crtc_state, i) { 13180 struct intel_shared_dpll *old_dpll = 13181 old_crtc_state->shared_dpll; 13182 13183 if (!needs_modeset(&new_crtc_state->base)) 13184 continue; 13185 13186 new_crtc_state->shared_dpll = NULL; 13187 13188 if (!old_dpll) 13189 continue; 13190 13191 intel_release_shared_dpll(old_dpll, crtc, &state->base); 13192 } 13193 } 13194 13195 /* 13196 * This implements the workaround described in the "notes" section of the mode 13197 * set sequence documentation. When going from no pipes or single pipe to 13198 * multiple pipes, and planes are enabled after the pipe, we need to wait at 13199 * least 2 vblanks on the first pipe before enabling planes on the second pipe. 13200 */ 13201 static int haswell_mode_set_planes_workaround(struct intel_atomic_state *state) 13202 { 13203 struct intel_crtc_state *crtc_state; 13204 struct intel_crtc *crtc; 13205 struct intel_crtc_state *first_crtc_state = NULL; 13206 struct intel_crtc_state *other_crtc_state = NULL; 13207 enum pipe first_pipe = INVALID_PIPE, enabled_pipe = INVALID_PIPE; 13208 int i; 13209 13210 /* look at all crtc's that are going to be enabled in during modeset */ 13211 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 13212 if (!crtc_state->base.active || 13213 !needs_modeset(&crtc_state->base)) 13214 continue; 13215 13216 if (first_crtc_state) { 13217 other_crtc_state = crtc_state; 13218 break; 13219 } else { 13220 first_crtc_state = crtc_state; 13221 first_pipe = crtc->pipe; 13222 } 13223 } 13224 13225 /* No workaround needed? */ 13226 if (!first_crtc_state) 13227 return 0; 13228 13229 /* w/a possibly needed, check how many crtc's are already enabled. */ 13230 for_each_intel_crtc(state->base.dev, crtc) { 13231 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 13232 if (IS_ERR(crtc_state)) 13233 return PTR_ERR(crtc_state); 13234 13235 crtc_state->hsw_workaround_pipe = INVALID_PIPE; 13236 13237 if (!crtc_state->base.active || 13238 needs_modeset(&crtc_state->base)) 13239 continue; 13240 13241 /* 2 or more enabled crtcs means no need for w/a */ 13242 if (enabled_pipe != INVALID_PIPE) 13243 return 0; 13244 13245 enabled_pipe = crtc->pipe; 13246 } 13247 13248 if (enabled_pipe != INVALID_PIPE) 13249 first_crtc_state->hsw_workaround_pipe = enabled_pipe; 13250 else if (other_crtc_state) 13251 other_crtc_state->hsw_workaround_pipe = first_pipe; 13252 13253 return 0; 13254 } 13255 13256 static int intel_lock_all_pipes(struct drm_atomic_state *state) 13257 { 13258 struct drm_crtc *crtc; 13259 13260 /* Add all pipes to the state */ 13261 for_each_crtc(state->dev, crtc) { 13262 struct drm_crtc_state *crtc_state; 13263 13264 crtc_state = drm_atomic_get_crtc_state(state, crtc); 13265 if (IS_ERR(crtc_state)) 13266 return PTR_ERR(crtc_state); 13267 } 13268 13269 return 0; 13270 } 13271 13272 static int intel_modeset_all_pipes(struct drm_atomic_state *state) 13273 { 13274 struct drm_crtc *crtc; 13275 13276 /* 13277 * Add all pipes to the state, and force 13278 * a modeset on all the active ones. 13279 */ 13280 for_each_crtc(state->dev, crtc) { 13281 struct drm_crtc_state *crtc_state; 13282 int ret; 13283 13284 crtc_state = drm_atomic_get_crtc_state(state, crtc); 13285 if (IS_ERR(crtc_state)) 13286 return PTR_ERR(crtc_state); 13287 13288 if (!crtc_state->active || needs_modeset(crtc_state)) 13289 continue; 13290 13291 crtc_state->mode_changed = true; 13292 13293 ret = drm_atomic_add_affected_connectors(state, crtc); 13294 if (ret) 13295 return ret; 13296 13297 ret = drm_atomic_add_affected_planes(state, crtc); 13298 if (ret) 13299 return ret; 13300 } 13301 13302 return 0; 13303 } 13304 13305 static int intel_modeset_checks(struct intel_atomic_state *state) 13306 { 13307 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 13308 struct intel_crtc_state *old_crtc_state, *new_crtc_state; 13309 struct intel_crtc *crtc; 13310 int ret = 0, i; 13311 13312 if (!check_digital_port_conflicts(state)) { 13313 DRM_DEBUG_KMS("rejecting conflicting digital port configuration\n"); 13314 return -EINVAL; 13315 } 13316 13317 /* keep the current setting */ 13318 if (!state->cdclk.force_min_cdclk_changed) 13319 state->cdclk.force_min_cdclk = dev_priv->cdclk.force_min_cdclk; 13320 13321 state->modeset = true; 13322 state->active_crtcs = dev_priv->active_crtcs; 13323 state->cdclk.logical = dev_priv->cdclk.logical; 13324 state->cdclk.actual = dev_priv->cdclk.actual; 13325 state->cdclk.pipe = INVALID_PIPE; 13326 13327 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13328 new_crtc_state, i) { 13329 if (new_crtc_state->base.active) 13330 state->active_crtcs |= 1 << i; 13331 else 13332 state->active_crtcs &= ~(1 << i); 13333 13334 if (old_crtc_state->base.active != new_crtc_state->base.active) 13335 state->active_pipe_changes |= drm_crtc_mask(&crtc->base); 13336 } 13337 13338 /* 13339 * See if the config requires any additional preparation, e.g. 13340 * to adjust global state with pipes off. We need to do this 13341 * here so we can get the modeset_pipe updated config for the new 13342 * mode set on this crtc. For other crtcs we need to use the 13343 * adjusted_mode bits in the crtc directly. 13344 */ 13345 if (dev_priv->display.modeset_calc_cdclk) { 13346 enum pipe pipe; 13347 13348 ret = dev_priv->display.modeset_calc_cdclk(state); 13349 if (ret < 0) 13350 return ret; 13351 13352 /* 13353 * Writes to dev_priv->cdclk.logical must protected by 13354 * holding all the crtc locks, even if we don't end up 13355 * touching the hardware 13356 */ 13357 if (intel_cdclk_changed(&dev_priv->cdclk.logical, 13358 &state->cdclk.logical)) { 13359 ret = intel_lock_all_pipes(&state->base); 13360 if (ret < 0) 13361 return ret; 13362 } 13363 13364 if (is_power_of_2(state->active_crtcs)) { 13365 struct drm_crtc *crtc; 13366 struct drm_crtc_state *crtc_state; 13367 13368 pipe = ilog2(state->active_crtcs); 13369 crtc = &intel_get_crtc_for_pipe(dev_priv, pipe)->base; 13370 crtc_state = drm_atomic_get_new_crtc_state(&state->base, crtc); 13371 if (crtc_state && needs_modeset(crtc_state)) 13372 pipe = INVALID_PIPE; 13373 } else { 13374 pipe = INVALID_PIPE; 13375 } 13376 13377 /* All pipes must be switched off while we change the cdclk. */ 13378 if (pipe != INVALID_PIPE && 13379 intel_cdclk_needs_cd2x_update(dev_priv, 13380 &dev_priv->cdclk.actual, 13381 &state->cdclk.actual)) { 13382 ret = intel_lock_all_pipes(&state->base); 13383 if (ret < 0) 13384 return ret; 13385 13386 state->cdclk.pipe = pipe; 13387 } else if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, 13388 &state->cdclk.actual)) { 13389 ret = intel_modeset_all_pipes(&state->base); 13390 if (ret < 0) 13391 return ret; 13392 13393 state->cdclk.pipe = INVALID_PIPE; 13394 } 13395 13396 DRM_DEBUG_KMS("New cdclk calculated to be logical %u kHz, actual %u kHz\n", 13397 state->cdclk.logical.cdclk, 13398 state->cdclk.actual.cdclk); 13399 DRM_DEBUG_KMS("New voltage level calculated to be logical %u, actual %u\n", 13400 state->cdclk.logical.voltage_level, 13401 state->cdclk.actual.voltage_level); 13402 } 13403 13404 intel_modeset_clear_plls(state); 13405 13406 if (IS_HASWELL(dev_priv)) 13407 return haswell_mode_set_planes_workaround(state); 13408 13409 return 0; 13410 } 13411 13412 /* 13413 * Handle calculation of various watermark data at the end of the atomic check 13414 * phase. The code here should be run after the per-crtc and per-plane 'check' 13415 * handlers to ensure that all derived state has been updated. 13416 */ 13417 static int calc_watermark_data(struct intel_atomic_state *state) 13418 { 13419 struct drm_device *dev = state->base.dev; 13420 struct drm_i915_private *dev_priv = to_i915(dev); 13421 13422 /* Is there platform-specific watermark information to calculate? */ 13423 if (dev_priv->display.compute_global_watermarks) 13424 return dev_priv->display.compute_global_watermarks(state); 13425 13426 return 0; 13427 } 13428 13429 static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_state, 13430 struct intel_crtc_state *new_crtc_state) 13431 { 13432 if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state, true)) 13433 return; 13434 13435 new_crtc_state->base.mode_changed = false; 13436 new_crtc_state->update_pipe = true; 13437 13438 /* 13439 * If we're not doing the full modeset we want to 13440 * keep the current M/N values as they may be 13441 * sufficiently different to the computed values 13442 * to cause problems. 13443 * 13444 * FIXME: should really copy more fuzzy state here 13445 */ 13446 new_crtc_state->fdi_m_n = old_crtc_state->fdi_m_n; 13447 new_crtc_state->dp_m_n = old_crtc_state->dp_m_n; 13448 new_crtc_state->dp_m2_n2 = old_crtc_state->dp_m2_n2; 13449 new_crtc_state->has_drrs = old_crtc_state->has_drrs; 13450 } 13451 13452 /** 13453 * intel_atomic_check - validate state object 13454 * @dev: drm device 13455 * @_state: state to validate 13456 */ 13457 static int intel_atomic_check(struct drm_device *dev, 13458 struct drm_atomic_state *_state) 13459 { 13460 struct drm_i915_private *dev_priv = to_i915(dev); 13461 struct intel_atomic_state *state = to_intel_atomic_state(_state); 13462 struct intel_crtc_state *old_crtc_state, *new_crtc_state; 13463 struct intel_crtc *crtc; 13464 int ret, i; 13465 bool any_ms = state->cdclk.force_min_cdclk_changed; 13466 13467 /* Catch I915_MODE_FLAG_INHERITED */ 13468 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13469 new_crtc_state, i) { 13470 if (new_crtc_state->base.mode.private_flags != 13471 old_crtc_state->base.mode.private_flags) 13472 new_crtc_state->base.mode_changed = true; 13473 } 13474 13475 ret = drm_atomic_helper_check_modeset(dev, &state->base); 13476 if (ret) 13477 goto fail; 13478 13479 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13480 new_crtc_state, i) { 13481 if (!needs_modeset(&new_crtc_state->base)) 13482 continue; 13483 13484 if (!new_crtc_state->base.enable) { 13485 any_ms = true; 13486 continue; 13487 } 13488 13489 ret = intel_modeset_pipe_config(new_crtc_state); 13490 if (ret) 13491 goto fail; 13492 13493 intel_crtc_check_fastset(old_crtc_state, new_crtc_state); 13494 13495 if (needs_modeset(&new_crtc_state->base)) 13496 any_ms = true; 13497 } 13498 13499 ret = drm_dp_mst_atomic_check(&state->base); 13500 if (ret) 13501 goto fail; 13502 13503 if (any_ms) { 13504 ret = intel_modeset_checks(state); 13505 if (ret) 13506 goto fail; 13507 } else { 13508 state->cdclk.logical = dev_priv->cdclk.logical; 13509 } 13510 13511 ret = icl_add_linked_planes(state); 13512 if (ret) 13513 goto fail; 13514 13515 ret = drm_atomic_helper_check_planes(dev, &state->base); 13516 if (ret) 13517 goto fail; 13518 13519 intel_fbc_choose_crtc(dev_priv, state); 13520 ret = calc_watermark_data(state); 13521 if (ret) 13522 goto fail; 13523 13524 ret = intel_bw_atomic_check(state); 13525 if (ret) 13526 goto fail; 13527 13528 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13529 new_crtc_state, i) { 13530 if (!needs_modeset(&new_crtc_state->base) && 13531 !new_crtc_state->update_pipe) 13532 continue; 13533 13534 intel_dump_pipe_config(new_crtc_state, state, 13535 needs_modeset(&new_crtc_state->base) ? 13536 "[modeset]" : "[fastset]"); 13537 } 13538 13539 return 0; 13540 13541 fail: 13542 if (ret == -EDEADLK) 13543 return ret; 13544 13545 /* 13546 * FIXME would probably be nice to know which crtc specifically 13547 * caused the failure, in cases where we can pinpoint it. 13548 */ 13549 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 13550 new_crtc_state, i) 13551 intel_dump_pipe_config(new_crtc_state, state, "[failed]"); 13552 13553 return ret; 13554 } 13555 13556 static int intel_atomic_prepare_commit(struct drm_device *dev, 13557 struct drm_atomic_state *state) 13558 { 13559 return drm_atomic_helper_prepare_planes(dev, state); 13560 } 13561 13562 u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc) 13563 { 13564 struct drm_device *dev = crtc->base.dev; 13565 struct drm_vblank_crtc *vblank = &dev->vblank[drm_crtc_index(&crtc->base)]; 13566 13567 if (!vblank->max_vblank_count) 13568 return (u32)drm_crtc_accurate_vblank_count(&crtc->base); 13569 13570 return dev->driver->get_vblank_counter(dev, crtc->pipe); 13571 } 13572 13573 static void intel_update_crtc(struct drm_crtc *crtc, 13574 struct drm_atomic_state *state, 13575 struct drm_crtc_state *old_crtc_state, 13576 struct drm_crtc_state *new_crtc_state) 13577 { 13578 struct drm_device *dev = crtc->dev; 13579 struct drm_i915_private *dev_priv = to_i915(dev); 13580 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 13581 struct intel_crtc_state *pipe_config = to_intel_crtc_state(new_crtc_state); 13582 bool modeset = needs_modeset(new_crtc_state); 13583 struct intel_plane_state *new_plane_state = 13584 intel_atomic_get_new_plane_state(to_intel_atomic_state(state), 13585 to_intel_plane(crtc->primary)); 13586 13587 if (modeset) { 13588 update_scanline_offset(pipe_config); 13589 dev_priv->display.crtc_enable(pipe_config, state); 13590 13591 /* vblanks work again, re-enable pipe CRC. */ 13592 intel_crtc_enable_pipe_crc(intel_crtc); 13593 } else { 13594 intel_pre_plane_update(to_intel_crtc_state(old_crtc_state), 13595 pipe_config); 13596 13597 if (pipe_config->update_pipe) 13598 intel_encoders_update_pipe(crtc, pipe_config, state); 13599 } 13600 13601 if (pipe_config->update_pipe && !pipe_config->enable_fbc) 13602 intel_fbc_disable(intel_crtc); 13603 else if (new_plane_state) 13604 intel_fbc_enable(intel_crtc, pipe_config, new_plane_state); 13605 13606 intel_begin_crtc_commit(to_intel_atomic_state(state), intel_crtc); 13607 13608 if (INTEL_GEN(dev_priv) >= 9) 13609 skl_update_planes_on_crtc(to_intel_atomic_state(state), intel_crtc); 13610 else 13611 i9xx_update_planes_on_crtc(to_intel_atomic_state(state), intel_crtc); 13612 13613 intel_finish_crtc_commit(to_intel_atomic_state(state), intel_crtc); 13614 } 13615 13616 static void intel_update_crtcs(struct drm_atomic_state *state) 13617 { 13618 struct drm_crtc *crtc; 13619 struct drm_crtc_state *old_crtc_state, *new_crtc_state; 13620 int i; 13621 13622 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 13623 if (!new_crtc_state->active) 13624 continue; 13625 13626 intel_update_crtc(crtc, state, old_crtc_state, 13627 new_crtc_state); 13628 } 13629 } 13630 13631 static void skl_update_crtcs(struct drm_atomic_state *state) 13632 { 13633 struct drm_i915_private *dev_priv = to_i915(state->dev); 13634 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 13635 struct drm_crtc *crtc; 13636 struct intel_crtc *intel_crtc; 13637 struct drm_crtc_state *old_crtc_state, *new_crtc_state; 13638 struct intel_crtc_state *cstate; 13639 unsigned int updated = 0; 13640 bool progress; 13641 enum pipe pipe; 13642 int i; 13643 u8 hw_enabled_slices = dev_priv->wm.skl_hw.ddb.enabled_slices; 13644 u8 required_slices = intel_state->wm_results.ddb.enabled_slices; 13645 struct skl_ddb_entry entries[I915_MAX_PIPES] = {}; 13646 13647 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) 13648 /* ignore allocations for crtc's that have been turned off. */ 13649 if (new_crtc_state->active) 13650 entries[i] = to_intel_crtc_state(old_crtc_state)->wm.skl.ddb; 13651 13652 /* If 2nd DBuf slice required, enable it here */ 13653 if (INTEL_GEN(dev_priv) >= 11 && required_slices > hw_enabled_slices) 13654 icl_dbuf_slices_update(dev_priv, required_slices); 13655 13656 /* 13657 * Whenever the number of active pipes changes, we need to make sure we 13658 * update the pipes in the right order so that their ddb allocations 13659 * never overlap with eachother inbetween CRTC updates. Otherwise we'll 13660 * cause pipe underruns and other bad stuff. 13661 */ 13662 do { 13663 progress = false; 13664 13665 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 13666 bool vbl_wait = false; 13667 unsigned int cmask = drm_crtc_mask(crtc); 13668 13669 intel_crtc = to_intel_crtc(crtc); 13670 cstate = to_intel_crtc_state(new_crtc_state); 13671 pipe = intel_crtc->pipe; 13672 13673 if (updated & cmask || !cstate->base.active) 13674 continue; 13675 13676 if (skl_ddb_allocation_overlaps(&cstate->wm.skl.ddb, 13677 entries, 13678 INTEL_INFO(dev_priv)->num_pipes, i)) 13679 continue; 13680 13681 updated |= cmask; 13682 entries[i] = cstate->wm.skl.ddb; 13683 13684 /* 13685 * If this is an already active pipe, it's DDB changed, 13686 * and this isn't the last pipe that needs updating 13687 * then we need to wait for a vblank to pass for the 13688 * new ddb allocation to take effect. 13689 */ 13690 if (!skl_ddb_entry_equal(&cstate->wm.skl.ddb, 13691 &to_intel_crtc_state(old_crtc_state)->wm.skl.ddb) && 13692 !new_crtc_state->active_changed && 13693 intel_state->wm_results.dirty_pipes != updated) 13694 vbl_wait = true; 13695 13696 intel_update_crtc(crtc, state, old_crtc_state, 13697 new_crtc_state); 13698 13699 if (vbl_wait) 13700 intel_wait_for_vblank(dev_priv, pipe); 13701 13702 progress = true; 13703 } 13704 } while (progress); 13705 13706 /* If 2nd DBuf slice is no more required disable it */ 13707 if (INTEL_GEN(dev_priv) >= 11 && required_slices < hw_enabled_slices) 13708 icl_dbuf_slices_update(dev_priv, required_slices); 13709 } 13710 13711 static void intel_atomic_helper_free_state(struct drm_i915_private *dev_priv) 13712 { 13713 struct intel_atomic_state *state, *next; 13714 struct llist_node *freed; 13715 13716 freed = llist_del_all(&dev_priv->atomic_helper.free_list); 13717 llist_for_each_entry_safe(state, next, freed, freed) 13718 drm_atomic_state_put(&state->base); 13719 } 13720 13721 static void intel_atomic_helper_free_state_worker(struct work_struct *work) 13722 { 13723 struct drm_i915_private *dev_priv = 13724 container_of(work, typeof(*dev_priv), atomic_helper.free_work); 13725 13726 intel_atomic_helper_free_state(dev_priv); 13727 } 13728 13729 static void intel_atomic_commit_fence_wait(struct intel_atomic_state *intel_state) 13730 { 13731 struct wait_queue_entry wait_fence, wait_reset; 13732 struct drm_i915_private *dev_priv = to_i915(intel_state->base.dev); 13733 13734 init_wait_entry(&wait_fence, 0); 13735 init_wait_entry(&wait_reset, 0); 13736 for (;;) { 13737 prepare_to_wait(&intel_state->commit_ready.wait, 13738 &wait_fence, TASK_UNINTERRUPTIBLE); 13739 prepare_to_wait(&dev_priv->gpu_error.wait_queue, 13740 &wait_reset, TASK_UNINTERRUPTIBLE); 13741 13742 13743 if (i915_sw_fence_done(&intel_state->commit_ready) 13744 || test_bit(I915_RESET_MODESET, &dev_priv->gpu_error.flags)) 13745 break; 13746 13747 schedule(); 13748 } 13749 finish_wait(&intel_state->commit_ready.wait, &wait_fence); 13750 finish_wait(&dev_priv->gpu_error.wait_queue, &wait_reset); 13751 } 13752 13753 static void intel_atomic_cleanup_work(struct work_struct *work) 13754 { 13755 struct drm_atomic_state *state = 13756 container_of(work, struct drm_atomic_state, commit_work); 13757 struct drm_i915_private *i915 = to_i915(state->dev); 13758 13759 drm_atomic_helper_cleanup_planes(&i915->drm, state); 13760 drm_atomic_helper_commit_cleanup_done(state); 13761 drm_atomic_state_put(state); 13762 13763 intel_atomic_helper_free_state(i915); 13764 } 13765 13766 static void intel_atomic_commit_tail(struct drm_atomic_state *state) 13767 { 13768 struct drm_device *dev = state->dev; 13769 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 13770 struct drm_i915_private *dev_priv = to_i915(dev); 13771 struct drm_crtc_state *old_crtc_state, *new_crtc_state; 13772 struct intel_crtc_state *new_intel_crtc_state, *old_intel_crtc_state; 13773 struct drm_crtc *crtc; 13774 struct intel_crtc *intel_crtc; 13775 u64 put_domains[I915_MAX_PIPES] = {}; 13776 intel_wakeref_t wakeref = 0; 13777 int i; 13778 13779 intel_atomic_commit_fence_wait(intel_state); 13780 13781 drm_atomic_helper_wait_for_dependencies(state); 13782 13783 if (intel_state->modeset) 13784 wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_MODESET); 13785 13786 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 13787 old_intel_crtc_state = to_intel_crtc_state(old_crtc_state); 13788 new_intel_crtc_state = to_intel_crtc_state(new_crtc_state); 13789 intel_crtc = to_intel_crtc(crtc); 13790 13791 if (needs_modeset(new_crtc_state) || 13792 to_intel_crtc_state(new_crtc_state)->update_pipe) { 13793 13794 put_domains[intel_crtc->pipe] = 13795 modeset_get_crtc_power_domains(crtc, 13796 new_intel_crtc_state); 13797 } 13798 13799 if (!needs_modeset(new_crtc_state)) 13800 continue; 13801 13802 intel_pre_plane_update(old_intel_crtc_state, new_intel_crtc_state); 13803 13804 if (old_crtc_state->active) { 13805 intel_crtc_disable_planes(intel_state, intel_crtc); 13806 13807 /* 13808 * We need to disable pipe CRC before disabling the pipe, 13809 * or we race against vblank off. 13810 */ 13811 intel_crtc_disable_pipe_crc(intel_crtc); 13812 13813 dev_priv->display.crtc_disable(old_intel_crtc_state, state); 13814 intel_crtc->active = false; 13815 intel_fbc_disable(intel_crtc); 13816 intel_disable_shared_dpll(old_intel_crtc_state); 13817 13818 /* 13819 * Underruns don't always raise 13820 * interrupts, so check manually. 13821 */ 13822 intel_check_cpu_fifo_underruns(dev_priv); 13823 intel_check_pch_fifo_underruns(dev_priv); 13824 13825 /* FIXME unify this for all platforms */ 13826 if (!new_crtc_state->active && 13827 !HAS_GMCH(dev_priv) && 13828 dev_priv->display.initial_watermarks) 13829 dev_priv->display.initial_watermarks(intel_state, 13830 new_intel_crtc_state); 13831 } 13832 } 13833 13834 /* FIXME: Eventually get rid of our intel_crtc->config pointer */ 13835 for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) 13836 to_intel_crtc(crtc)->config = to_intel_crtc_state(new_crtc_state); 13837 13838 if (intel_state->modeset) { 13839 drm_atomic_helper_update_legacy_modeset_state(state->dev, state); 13840 13841 intel_set_cdclk_pre_plane_update(dev_priv, 13842 &intel_state->cdclk.actual, 13843 &dev_priv->cdclk.actual, 13844 intel_state->cdclk.pipe); 13845 13846 /* 13847 * SKL workaround: bspec recommends we disable the SAGV when we 13848 * have more then one pipe enabled 13849 */ 13850 if (!intel_can_enable_sagv(state)) 13851 intel_disable_sagv(dev_priv); 13852 13853 intel_modeset_verify_disabled(dev, state); 13854 } 13855 13856 /* Complete the events for pipes that have now been disabled */ 13857 for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { 13858 bool modeset = needs_modeset(new_crtc_state); 13859 13860 /* Complete events for now disable pipes here. */ 13861 if (modeset && !new_crtc_state->active && new_crtc_state->event) { 13862 spin_lock_irq(&dev->event_lock); 13863 drm_crtc_send_vblank_event(crtc, new_crtc_state->event); 13864 spin_unlock_irq(&dev->event_lock); 13865 13866 new_crtc_state->event = NULL; 13867 } 13868 } 13869 13870 /* Now enable the clocks, plane, pipe, and connectors that we set up. */ 13871 dev_priv->display.update_crtcs(state); 13872 13873 if (intel_state->modeset) 13874 intel_set_cdclk_post_plane_update(dev_priv, 13875 &intel_state->cdclk.actual, 13876 &dev_priv->cdclk.actual, 13877 intel_state->cdclk.pipe); 13878 13879 /* FIXME: We should call drm_atomic_helper_commit_hw_done() here 13880 * already, but still need the state for the delayed optimization. To 13881 * fix this: 13882 * - wrap the optimization/post_plane_update stuff into a per-crtc work. 13883 * - schedule that vblank worker _before_ calling hw_done 13884 * - at the start of commit_tail, cancel it _synchrously 13885 * - switch over to the vblank wait helper in the core after that since 13886 * we don't need out special handling any more. 13887 */ 13888 drm_atomic_helper_wait_for_flip_done(dev, state); 13889 13890 for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { 13891 new_intel_crtc_state = to_intel_crtc_state(new_crtc_state); 13892 13893 if (new_crtc_state->active && 13894 !needs_modeset(new_crtc_state) && 13895 (new_intel_crtc_state->base.color_mgmt_changed || 13896 new_intel_crtc_state->update_pipe)) 13897 intel_color_load_luts(new_intel_crtc_state); 13898 } 13899 13900 /* 13901 * Now that the vblank has passed, we can go ahead and program the 13902 * optimal watermarks on platforms that need two-step watermark 13903 * programming. 13904 * 13905 * TODO: Move this (and other cleanup) to an async worker eventually. 13906 */ 13907 for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { 13908 new_intel_crtc_state = to_intel_crtc_state(new_crtc_state); 13909 13910 if (dev_priv->display.optimize_watermarks) 13911 dev_priv->display.optimize_watermarks(intel_state, 13912 new_intel_crtc_state); 13913 } 13914 13915 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 13916 intel_post_plane_update(to_intel_crtc_state(old_crtc_state)); 13917 13918 if (put_domains[i]) 13919 modeset_put_power_domains(dev_priv, put_domains[i]); 13920 13921 intel_modeset_verify_crtc(crtc, state, old_crtc_state, new_crtc_state); 13922 } 13923 13924 if (intel_state->modeset) 13925 intel_verify_planes(intel_state); 13926 13927 if (intel_state->modeset && intel_can_enable_sagv(state)) 13928 intel_enable_sagv(dev_priv); 13929 13930 drm_atomic_helper_commit_hw_done(state); 13931 13932 if (intel_state->modeset) { 13933 /* As one of the primary mmio accessors, KMS has a high 13934 * likelihood of triggering bugs in unclaimed access. After we 13935 * finish modesetting, see if an error has been flagged, and if 13936 * so enable debugging for the next modeset - and hope we catch 13937 * the culprit. 13938 */ 13939 intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); 13940 intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET, wakeref); 13941 } 13942 intel_runtime_pm_put(&dev_priv->runtime_pm, intel_state->wakeref); 13943 13944 /* 13945 * Defer the cleanup of the old state to a separate worker to not 13946 * impede the current task (userspace for blocking modesets) that 13947 * are executed inline. For out-of-line asynchronous modesets/flips, 13948 * deferring to a new worker seems overkill, but we would place a 13949 * schedule point (cond_resched()) here anyway to keep latencies 13950 * down. 13951 */ 13952 INIT_WORK(&state->commit_work, intel_atomic_cleanup_work); 13953 queue_work(system_highpri_wq, &state->commit_work); 13954 } 13955 13956 static void intel_atomic_commit_work(struct work_struct *work) 13957 { 13958 struct drm_atomic_state *state = 13959 container_of(work, struct drm_atomic_state, commit_work); 13960 13961 intel_atomic_commit_tail(state); 13962 } 13963 13964 static int __i915_sw_fence_call 13965 intel_atomic_commit_ready(struct i915_sw_fence *fence, 13966 enum i915_sw_fence_notify notify) 13967 { 13968 struct intel_atomic_state *state = 13969 container_of(fence, struct intel_atomic_state, commit_ready); 13970 13971 switch (notify) { 13972 case FENCE_COMPLETE: 13973 /* we do blocking waits in the worker, nothing to do here */ 13974 break; 13975 case FENCE_FREE: 13976 { 13977 struct intel_atomic_helper *helper = 13978 &to_i915(state->base.dev)->atomic_helper; 13979 13980 if (llist_add(&state->freed, &helper->free_list)) 13981 schedule_work(&helper->free_work); 13982 break; 13983 } 13984 } 13985 13986 return NOTIFY_DONE; 13987 } 13988 13989 static void intel_atomic_track_fbs(struct drm_atomic_state *state) 13990 { 13991 struct drm_plane_state *old_plane_state, *new_plane_state; 13992 struct drm_plane *plane; 13993 int i; 13994 13995 for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) 13996 i915_gem_track_fb(intel_fb_obj(old_plane_state->fb), 13997 intel_fb_obj(new_plane_state->fb), 13998 to_intel_plane(plane)->frontbuffer_bit); 13999 } 14000 14001 /** 14002 * intel_atomic_commit - commit validated state object 14003 * @dev: DRM device 14004 * @state: the top-level driver state object 14005 * @nonblock: nonblocking commit 14006 * 14007 * This function commits a top-level state object that has been validated 14008 * with drm_atomic_helper_check(). 14009 * 14010 * RETURNS 14011 * Zero for success or -errno. 14012 */ 14013 static int intel_atomic_commit(struct drm_device *dev, 14014 struct drm_atomic_state *state, 14015 bool nonblock) 14016 { 14017 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 14018 struct drm_i915_private *dev_priv = to_i915(dev); 14019 int ret = 0; 14020 14021 intel_state->wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm); 14022 14023 drm_atomic_state_get(state); 14024 i915_sw_fence_init(&intel_state->commit_ready, 14025 intel_atomic_commit_ready); 14026 14027 /* 14028 * The intel_legacy_cursor_update() fast path takes care 14029 * of avoiding the vblank waits for simple cursor 14030 * movement and flips. For cursor on/off and size changes, 14031 * we want to perform the vblank waits so that watermark 14032 * updates happen during the correct frames. Gen9+ have 14033 * double buffered watermarks and so shouldn't need this. 14034 * 14035 * Unset state->legacy_cursor_update before the call to 14036 * drm_atomic_helper_setup_commit() because otherwise 14037 * drm_atomic_helper_wait_for_flip_done() is a noop and 14038 * we get FIFO underruns because we didn't wait 14039 * for vblank. 14040 * 14041 * FIXME doing watermarks and fb cleanup from a vblank worker 14042 * (assuming we had any) would solve these problems. 14043 */ 14044 if (INTEL_GEN(dev_priv) < 9 && state->legacy_cursor_update) { 14045 struct intel_crtc_state *new_crtc_state; 14046 struct intel_crtc *crtc; 14047 int i; 14048 14049 for_each_new_intel_crtc_in_state(intel_state, crtc, new_crtc_state, i) 14050 if (new_crtc_state->wm.need_postvbl_update || 14051 new_crtc_state->update_wm_post) 14052 state->legacy_cursor_update = false; 14053 } 14054 14055 ret = intel_atomic_prepare_commit(dev, state); 14056 if (ret) { 14057 DRM_DEBUG_ATOMIC("Preparing state failed with %i\n", ret); 14058 i915_sw_fence_commit(&intel_state->commit_ready); 14059 intel_runtime_pm_put(&dev_priv->runtime_pm, intel_state->wakeref); 14060 return ret; 14061 } 14062 14063 ret = drm_atomic_helper_setup_commit(state, nonblock); 14064 if (!ret) 14065 ret = drm_atomic_helper_swap_state(state, true); 14066 14067 if (ret) { 14068 i915_sw_fence_commit(&intel_state->commit_ready); 14069 14070 drm_atomic_helper_cleanup_planes(dev, state); 14071 intel_runtime_pm_put(&dev_priv->runtime_pm, intel_state->wakeref); 14072 return ret; 14073 } 14074 dev_priv->wm.distrust_bios_wm = false; 14075 intel_shared_dpll_swap_state(state); 14076 intel_atomic_track_fbs(state); 14077 14078 if (intel_state->modeset) { 14079 memcpy(dev_priv->min_cdclk, intel_state->min_cdclk, 14080 sizeof(intel_state->min_cdclk)); 14081 memcpy(dev_priv->min_voltage_level, 14082 intel_state->min_voltage_level, 14083 sizeof(intel_state->min_voltage_level)); 14084 dev_priv->active_crtcs = intel_state->active_crtcs; 14085 dev_priv->cdclk.force_min_cdclk = 14086 intel_state->cdclk.force_min_cdclk; 14087 14088 intel_cdclk_swap_state(intel_state); 14089 } 14090 14091 drm_atomic_state_get(state); 14092 INIT_WORK(&state->commit_work, intel_atomic_commit_work); 14093 14094 i915_sw_fence_commit(&intel_state->commit_ready); 14095 if (nonblock && intel_state->modeset) { 14096 queue_work(dev_priv->modeset_wq, &state->commit_work); 14097 } else if (nonblock) { 14098 queue_work(system_unbound_wq, &state->commit_work); 14099 } else { 14100 if (intel_state->modeset) 14101 flush_workqueue(dev_priv->modeset_wq); 14102 intel_atomic_commit_tail(state); 14103 } 14104 14105 return 0; 14106 } 14107 14108 static const struct drm_crtc_funcs intel_crtc_funcs = { 14109 .gamma_set = drm_atomic_helper_legacy_gamma_set, 14110 .set_config = drm_atomic_helper_set_config, 14111 .destroy = intel_crtc_destroy, 14112 .page_flip = drm_atomic_helper_page_flip, 14113 .atomic_duplicate_state = intel_crtc_duplicate_state, 14114 .atomic_destroy_state = intel_crtc_destroy_state, 14115 .set_crc_source = intel_crtc_set_crc_source, 14116 .verify_crc_source = intel_crtc_verify_crc_source, 14117 .get_crc_sources = intel_crtc_get_crc_sources, 14118 }; 14119 14120 struct wait_rps_boost { 14121 struct wait_queue_entry wait; 14122 14123 struct drm_crtc *crtc; 14124 struct i915_request *request; 14125 }; 14126 14127 static int do_rps_boost(struct wait_queue_entry *_wait, 14128 unsigned mode, int sync, void *key) 14129 { 14130 struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait); 14131 struct i915_request *rq = wait->request; 14132 14133 /* 14134 * If we missed the vblank, but the request is already running it 14135 * is reasonable to assume that it will complete before the next 14136 * vblank without our intervention, so leave RPS alone. 14137 */ 14138 if (!i915_request_started(rq)) 14139 gen6_rps_boost(rq); 14140 i915_request_put(rq); 14141 14142 drm_crtc_vblank_put(wait->crtc); 14143 14144 list_del(&wait->wait.entry); 14145 kfree(wait); 14146 return 1; 14147 } 14148 14149 static void add_rps_boost_after_vblank(struct drm_crtc *crtc, 14150 struct dma_fence *fence) 14151 { 14152 struct wait_rps_boost *wait; 14153 14154 if (!dma_fence_is_i915(fence)) 14155 return; 14156 14157 if (INTEL_GEN(to_i915(crtc->dev)) < 6) 14158 return; 14159 14160 if (drm_crtc_vblank_get(crtc)) 14161 return; 14162 14163 wait = kmalloc(sizeof(*wait), GFP_KERNEL); 14164 if (!wait) { 14165 drm_crtc_vblank_put(crtc); 14166 return; 14167 } 14168 14169 wait->request = to_request(dma_fence_get(fence)); 14170 wait->crtc = crtc; 14171 14172 wait->wait.func = do_rps_boost; 14173 wait->wait.flags = 0; 14174 14175 add_wait_queue(drm_crtc_vblank_waitqueue(crtc), &wait->wait); 14176 } 14177 14178 static int intel_plane_pin_fb(struct intel_plane_state *plane_state) 14179 { 14180 struct intel_plane *plane = to_intel_plane(plane_state->base.plane); 14181 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); 14182 struct drm_framebuffer *fb = plane_state->base.fb; 14183 struct i915_vma *vma; 14184 14185 if (plane->id == PLANE_CURSOR && 14186 INTEL_INFO(dev_priv)->display.cursor_needs_physical) { 14187 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 14188 const int align = intel_cursor_alignment(dev_priv); 14189 int err; 14190 14191 err = i915_gem_object_attach_phys(obj, align); 14192 if (err) 14193 return err; 14194 } 14195 14196 vma = intel_pin_and_fence_fb_obj(fb, 14197 &plane_state->view, 14198 intel_plane_uses_fence(plane_state), 14199 &plane_state->flags); 14200 if (IS_ERR(vma)) 14201 return PTR_ERR(vma); 14202 14203 plane_state->vma = vma; 14204 14205 return 0; 14206 } 14207 14208 static void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state) 14209 { 14210 struct i915_vma *vma; 14211 14212 vma = fetch_and_zero(&old_plane_state->vma); 14213 if (vma) 14214 intel_unpin_fb_vma(vma, old_plane_state->flags); 14215 } 14216 14217 static void fb_obj_bump_render_priority(struct drm_i915_gem_object *obj) 14218 { 14219 struct i915_sched_attr attr = { 14220 .priority = I915_PRIORITY_DISPLAY, 14221 }; 14222 14223 i915_gem_object_wait_priority(obj, 0, &attr); 14224 } 14225 14226 /** 14227 * intel_prepare_plane_fb - Prepare fb for usage on plane 14228 * @plane: drm plane to prepare for 14229 * @new_state: the plane state being prepared 14230 * 14231 * Prepares a framebuffer for usage on a display plane. Generally this 14232 * involves pinning the underlying object and updating the frontbuffer tracking 14233 * bits. Some older platforms need special physical address handling for 14234 * cursor planes. 14235 * 14236 * Must be called with struct_mutex held. 14237 * 14238 * Returns 0 on success, negative error code on failure. 14239 */ 14240 int 14241 intel_prepare_plane_fb(struct drm_plane *plane, 14242 struct drm_plane_state *new_state) 14243 { 14244 struct intel_atomic_state *intel_state = 14245 to_intel_atomic_state(new_state->state); 14246 struct drm_i915_private *dev_priv = to_i915(plane->dev); 14247 struct drm_framebuffer *fb = new_state->fb; 14248 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 14249 struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->state->fb); 14250 int ret; 14251 14252 if (old_obj) { 14253 struct drm_crtc_state *crtc_state = 14254 drm_atomic_get_new_crtc_state(new_state->state, 14255 plane->state->crtc); 14256 14257 /* Big Hammer, we also need to ensure that any pending 14258 * MI_WAIT_FOR_EVENT inside a user batch buffer on the 14259 * current scanout is retired before unpinning the old 14260 * framebuffer. Note that we rely on userspace rendering 14261 * into the buffer attached to the pipe they are waiting 14262 * on. If not, userspace generates a GPU hang with IPEHR 14263 * point to the MI_WAIT_FOR_EVENT. 14264 * 14265 * This should only fail upon a hung GPU, in which case we 14266 * can safely continue. 14267 */ 14268 if (needs_modeset(crtc_state)) { 14269 ret = i915_sw_fence_await_reservation(&intel_state->commit_ready, 14270 old_obj->base.resv, NULL, 14271 false, 0, 14272 GFP_KERNEL); 14273 if (ret < 0) 14274 return ret; 14275 } 14276 } 14277 14278 if (new_state->fence) { /* explicit fencing */ 14279 ret = i915_sw_fence_await_dma_fence(&intel_state->commit_ready, 14280 new_state->fence, 14281 I915_FENCE_TIMEOUT, 14282 GFP_KERNEL); 14283 if (ret < 0) 14284 return ret; 14285 } 14286 14287 if (!obj) 14288 return 0; 14289 14290 ret = i915_gem_object_pin_pages(obj); 14291 if (ret) 14292 return ret; 14293 14294 ret = mutex_lock_interruptible(&dev_priv->drm.struct_mutex); 14295 if (ret) { 14296 i915_gem_object_unpin_pages(obj); 14297 return ret; 14298 } 14299 14300 ret = intel_plane_pin_fb(to_intel_plane_state(new_state)); 14301 14302 mutex_unlock(&dev_priv->drm.struct_mutex); 14303 i915_gem_object_unpin_pages(obj); 14304 if (ret) 14305 return ret; 14306 14307 fb_obj_bump_render_priority(obj); 14308 intel_fb_obj_flush(obj, ORIGIN_DIRTYFB); 14309 14310 if (!new_state->fence) { /* implicit fencing */ 14311 struct dma_fence *fence; 14312 14313 ret = i915_sw_fence_await_reservation(&intel_state->commit_ready, 14314 obj->base.resv, NULL, 14315 false, I915_FENCE_TIMEOUT, 14316 GFP_KERNEL); 14317 if (ret < 0) 14318 return ret; 14319 14320 fence = reservation_object_get_excl_rcu(obj->base.resv); 14321 if (fence) { 14322 add_rps_boost_after_vblank(new_state->crtc, fence); 14323 dma_fence_put(fence); 14324 } 14325 } else { 14326 add_rps_boost_after_vblank(new_state->crtc, new_state->fence); 14327 } 14328 14329 /* 14330 * We declare pageflips to be interactive and so merit a small bias 14331 * towards upclocking to deliver the frame on time. By only changing 14332 * the RPS thresholds to sample more regularly and aim for higher 14333 * clocks we can hopefully deliver low power workloads (like kodi) 14334 * that are not quite steady state without resorting to forcing 14335 * maximum clocks following a vblank miss (see do_rps_boost()). 14336 */ 14337 if (!intel_state->rps_interactive) { 14338 intel_rps_mark_interactive(dev_priv, true); 14339 intel_state->rps_interactive = true; 14340 } 14341 14342 return 0; 14343 } 14344 14345 /** 14346 * intel_cleanup_plane_fb - Cleans up an fb after plane use 14347 * @plane: drm plane to clean up for 14348 * @old_state: the state from the previous modeset 14349 * 14350 * Cleans up a framebuffer that has just been removed from a plane. 14351 * 14352 * Must be called with struct_mutex held. 14353 */ 14354 void 14355 intel_cleanup_plane_fb(struct drm_plane *plane, 14356 struct drm_plane_state *old_state) 14357 { 14358 struct intel_atomic_state *intel_state = 14359 to_intel_atomic_state(old_state->state); 14360 struct drm_i915_private *dev_priv = to_i915(plane->dev); 14361 14362 if (intel_state->rps_interactive) { 14363 intel_rps_mark_interactive(dev_priv, false); 14364 intel_state->rps_interactive = false; 14365 } 14366 14367 /* Should only be called after a successful intel_prepare_plane_fb()! */ 14368 mutex_lock(&dev_priv->drm.struct_mutex); 14369 intel_plane_unpin_fb(to_intel_plane_state(old_state)); 14370 mutex_unlock(&dev_priv->drm.struct_mutex); 14371 } 14372 14373 int 14374 skl_max_scale(const struct intel_crtc_state *crtc_state, 14375 u32 pixel_format) 14376 { 14377 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); 14378 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 14379 int max_scale, mult; 14380 int crtc_clock, max_dotclk, tmpclk1, tmpclk2; 14381 14382 if (!crtc_state->base.enable) 14383 return DRM_PLANE_HELPER_NO_SCALING; 14384 14385 crtc_clock = crtc_state->base.adjusted_mode.crtc_clock; 14386 max_dotclk = to_intel_atomic_state(crtc_state->base.state)->cdclk.logical.cdclk; 14387 14388 if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv) >= 10) 14389 max_dotclk *= 2; 14390 14391 if (WARN_ON_ONCE(!crtc_clock || max_dotclk < crtc_clock)) 14392 return DRM_PLANE_HELPER_NO_SCALING; 14393 14394 /* 14395 * skl max scale is lower of: 14396 * close to 3 but not 3, -1 is for that purpose 14397 * or 14398 * cdclk/crtc_clock 14399 */ 14400 mult = is_planar_yuv_format(pixel_format) ? 2 : 3; 14401 tmpclk1 = (1 << 16) * mult - 1; 14402 tmpclk2 = (1 << 8) * ((max_dotclk << 8) / crtc_clock); 14403 max_scale = min(tmpclk1, tmpclk2); 14404 14405 return max_scale; 14406 } 14407 14408 static void intel_begin_crtc_commit(struct intel_atomic_state *state, 14409 struct intel_crtc *crtc) 14410 { 14411 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 14412 struct intel_crtc_state *old_crtc_state = 14413 intel_atomic_get_old_crtc_state(state, crtc); 14414 struct intel_crtc_state *new_crtc_state = 14415 intel_atomic_get_new_crtc_state(state, crtc); 14416 bool modeset = needs_modeset(&new_crtc_state->base); 14417 14418 /* Perform vblank evasion around commit operation */ 14419 intel_pipe_update_start(new_crtc_state); 14420 14421 if (modeset) 14422 goto out; 14423 14424 if (new_crtc_state->base.color_mgmt_changed || 14425 new_crtc_state->update_pipe) 14426 intel_color_commit(new_crtc_state); 14427 14428 if (new_crtc_state->update_pipe) 14429 intel_update_pipe_config(old_crtc_state, new_crtc_state); 14430 else if (INTEL_GEN(dev_priv) >= 9) 14431 skl_detach_scalers(new_crtc_state); 14432 14433 if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) 14434 bdw_set_pipemisc(new_crtc_state); 14435 14436 out: 14437 if (dev_priv->display.atomic_update_watermarks) 14438 dev_priv->display.atomic_update_watermarks(state, 14439 new_crtc_state); 14440 } 14441 14442 void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc, 14443 struct intel_crtc_state *crtc_state) 14444 { 14445 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 14446 14447 if (!IS_GEN(dev_priv, 2)) 14448 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true); 14449 14450 if (crtc_state->has_pch_encoder) { 14451 enum pipe pch_transcoder = 14452 intel_crtc_pch_transcoder(crtc); 14453 14454 intel_set_pch_fifo_underrun_reporting(dev_priv, pch_transcoder, true); 14455 } 14456 } 14457 14458 static void intel_finish_crtc_commit(struct intel_atomic_state *state, 14459 struct intel_crtc *crtc) 14460 { 14461 struct intel_crtc_state *old_crtc_state = 14462 intel_atomic_get_old_crtc_state(state, crtc); 14463 struct intel_crtc_state *new_crtc_state = 14464 intel_atomic_get_new_crtc_state(state, crtc); 14465 14466 intel_pipe_update_end(new_crtc_state); 14467 14468 if (new_crtc_state->update_pipe && 14469 !needs_modeset(&new_crtc_state->base) && 14470 old_crtc_state->base.mode.private_flags & I915_MODE_FLAG_INHERITED) 14471 intel_crtc_arm_fifo_underrun(crtc, new_crtc_state); 14472 } 14473 14474 /** 14475 * intel_plane_destroy - destroy a plane 14476 * @plane: plane to destroy 14477 * 14478 * Common destruction function for all types of planes (primary, cursor, 14479 * sprite). 14480 */ 14481 void intel_plane_destroy(struct drm_plane *plane) 14482 { 14483 drm_plane_cleanup(plane); 14484 kfree(to_intel_plane(plane)); 14485 } 14486 14487 static bool i8xx_plane_format_mod_supported(struct drm_plane *_plane, 14488 u32 format, u64 modifier) 14489 { 14490 switch (modifier) { 14491 case DRM_FORMAT_MOD_LINEAR: 14492 case I915_FORMAT_MOD_X_TILED: 14493 break; 14494 default: 14495 return false; 14496 } 14497 14498 switch (format) { 14499 case DRM_FORMAT_C8: 14500 case DRM_FORMAT_RGB565: 14501 case DRM_FORMAT_XRGB1555: 14502 case DRM_FORMAT_XRGB8888: 14503 return modifier == DRM_FORMAT_MOD_LINEAR || 14504 modifier == I915_FORMAT_MOD_X_TILED; 14505 default: 14506 return false; 14507 } 14508 } 14509 14510 static bool i965_plane_format_mod_supported(struct drm_plane *_plane, 14511 u32 format, u64 modifier) 14512 { 14513 switch (modifier) { 14514 case DRM_FORMAT_MOD_LINEAR: 14515 case I915_FORMAT_MOD_X_TILED: 14516 break; 14517 default: 14518 return false; 14519 } 14520 14521 switch (format) { 14522 case DRM_FORMAT_C8: 14523 case DRM_FORMAT_RGB565: 14524 case DRM_FORMAT_XRGB8888: 14525 case DRM_FORMAT_XBGR8888: 14526 case DRM_FORMAT_XRGB2101010: 14527 case DRM_FORMAT_XBGR2101010: 14528 return modifier == DRM_FORMAT_MOD_LINEAR || 14529 modifier == I915_FORMAT_MOD_X_TILED; 14530 default: 14531 return false; 14532 } 14533 } 14534 14535 static bool intel_cursor_format_mod_supported(struct drm_plane *_plane, 14536 u32 format, u64 modifier) 14537 { 14538 return modifier == DRM_FORMAT_MOD_LINEAR && 14539 format == DRM_FORMAT_ARGB8888; 14540 } 14541 14542 static const struct drm_plane_funcs i965_plane_funcs = { 14543 .update_plane = drm_atomic_helper_update_plane, 14544 .disable_plane = drm_atomic_helper_disable_plane, 14545 .destroy = intel_plane_destroy, 14546 .atomic_duplicate_state = intel_plane_duplicate_state, 14547 .atomic_destroy_state = intel_plane_destroy_state, 14548 .format_mod_supported = i965_plane_format_mod_supported, 14549 }; 14550 14551 static const struct drm_plane_funcs i8xx_plane_funcs = { 14552 .update_plane = drm_atomic_helper_update_plane, 14553 .disable_plane = drm_atomic_helper_disable_plane, 14554 .destroy = intel_plane_destroy, 14555 .atomic_duplicate_state = intel_plane_duplicate_state, 14556 .atomic_destroy_state = intel_plane_destroy_state, 14557 .format_mod_supported = i8xx_plane_format_mod_supported, 14558 }; 14559 14560 static int 14561 intel_legacy_cursor_update(struct drm_plane *plane, 14562 struct drm_crtc *crtc, 14563 struct drm_framebuffer *fb, 14564 int crtc_x, int crtc_y, 14565 unsigned int crtc_w, unsigned int crtc_h, 14566 u32 src_x, u32 src_y, 14567 u32 src_w, u32 src_h, 14568 struct drm_modeset_acquire_ctx *ctx) 14569 { 14570 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 14571 int ret; 14572 struct drm_plane_state *old_plane_state, *new_plane_state; 14573 struct intel_plane *intel_plane = to_intel_plane(plane); 14574 struct drm_framebuffer *old_fb; 14575 struct intel_crtc_state *crtc_state = 14576 to_intel_crtc_state(crtc->state); 14577 struct intel_crtc_state *new_crtc_state; 14578 14579 /* 14580 * When crtc is inactive or there is a modeset pending, 14581 * wait for it to complete in the slowpath 14582 */ 14583 if (!crtc_state->base.active || needs_modeset(&crtc_state->base) || 14584 crtc_state->update_pipe) 14585 goto slow; 14586 14587 old_plane_state = plane->state; 14588 /* 14589 * Don't do an async update if there is an outstanding commit modifying 14590 * the plane. This prevents our async update's changes from getting 14591 * overridden by a previous synchronous update's state. 14592 */ 14593 if (old_plane_state->commit && 14594 !try_wait_for_completion(&old_plane_state->commit->hw_done)) 14595 goto slow; 14596 14597 /* 14598 * If any parameters change that may affect watermarks, 14599 * take the slowpath. Only changing fb or position should be 14600 * in the fastpath. 14601 */ 14602 if (old_plane_state->crtc != crtc || 14603 old_plane_state->src_w != src_w || 14604 old_plane_state->src_h != src_h || 14605 old_plane_state->crtc_w != crtc_w || 14606 old_plane_state->crtc_h != crtc_h || 14607 !old_plane_state->fb != !fb) 14608 goto slow; 14609 14610 new_plane_state = intel_plane_duplicate_state(plane); 14611 if (!new_plane_state) 14612 return -ENOMEM; 14613 14614 new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(crtc)); 14615 if (!new_crtc_state) { 14616 ret = -ENOMEM; 14617 goto out_free; 14618 } 14619 14620 drm_atomic_set_fb_for_plane(new_plane_state, fb); 14621 14622 new_plane_state->src_x = src_x; 14623 new_plane_state->src_y = src_y; 14624 new_plane_state->src_w = src_w; 14625 new_plane_state->src_h = src_h; 14626 new_plane_state->crtc_x = crtc_x; 14627 new_plane_state->crtc_y = crtc_y; 14628 new_plane_state->crtc_w = crtc_w; 14629 new_plane_state->crtc_h = crtc_h; 14630 14631 ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state, 14632 to_intel_plane_state(old_plane_state), 14633 to_intel_plane_state(new_plane_state)); 14634 if (ret) 14635 goto out_free; 14636 14637 ret = mutex_lock_interruptible(&dev_priv->drm.struct_mutex); 14638 if (ret) 14639 goto out_free; 14640 14641 ret = intel_plane_pin_fb(to_intel_plane_state(new_plane_state)); 14642 if (ret) 14643 goto out_unlock; 14644 14645 intel_fb_obj_flush(intel_fb_obj(fb), ORIGIN_FLIP); 14646 14647 old_fb = old_plane_state->fb; 14648 i915_gem_track_fb(intel_fb_obj(old_fb), intel_fb_obj(fb), 14649 intel_plane->frontbuffer_bit); 14650 14651 /* Swap plane state */ 14652 plane->state = new_plane_state; 14653 14654 /* 14655 * We cannot swap crtc_state as it may be in use by an atomic commit or 14656 * page flip that's running simultaneously. If we swap crtc_state and 14657 * destroy the old state, we will cause a use-after-free there. 14658 * 14659 * Only update active_planes, which is needed for our internal 14660 * bookkeeping. Either value will do the right thing when updating 14661 * planes atomically. If the cursor was part of the atomic update then 14662 * we would have taken the slowpath. 14663 */ 14664 crtc_state->active_planes = new_crtc_state->active_planes; 14665 14666 if (plane->state->visible) 14667 intel_update_plane(intel_plane, crtc_state, 14668 to_intel_plane_state(plane->state)); 14669 else 14670 intel_disable_plane(intel_plane, crtc_state); 14671 14672 intel_plane_unpin_fb(to_intel_plane_state(old_plane_state)); 14673 14674 out_unlock: 14675 mutex_unlock(&dev_priv->drm.struct_mutex); 14676 out_free: 14677 if (new_crtc_state) 14678 intel_crtc_destroy_state(crtc, &new_crtc_state->base); 14679 if (ret) 14680 intel_plane_destroy_state(plane, new_plane_state); 14681 else 14682 intel_plane_destroy_state(plane, old_plane_state); 14683 return ret; 14684 14685 slow: 14686 return drm_atomic_helper_update_plane(plane, crtc, fb, 14687 crtc_x, crtc_y, crtc_w, crtc_h, 14688 src_x, src_y, src_w, src_h, ctx); 14689 } 14690 14691 static const struct drm_plane_funcs intel_cursor_plane_funcs = { 14692 .update_plane = intel_legacy_cursor_update, 14693 .disable_plane = drm_atomic_helper_disable_plane, 14694 .destroy = intel_plane_destroy, 14695 .atomic_duplicate_state = intel_plane_duplicate_state, 14696 .atomic_destroy_state = intel_plane_destroy_state, 14697 .format_mod_supported = intel_cursor_format_mod_supported, 14698 }; 14699 14700 static bool i9xx_plane_has_fbc(struct drm_i915_private *dev_priv, 14701 enum i9xx_plane_id i9xx_plane) 14702 { 14703 if (!HAS_FBC(dev_priv)) 14704 return false; 14705 14706 if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) 14707 return i9xx_plane == PLANE_A; /* tied to pipe A */ 14708 else if (IS_IVYBRIDGE(dev_priv)) 14709 return i9xx_plane == PLANE_A || i9xx_plane == PLANE_B || 14710 i9xx_plane == PLANE_C; 14711 else if (INTEL_GEN(dev_priv) >= 4) 14712 return i9xx_plane == PLANE_A || i9xx_plane == PLANE_B; 14713 else 14714 return i9xx_plane == PLANE_A; 14715 } 14716 14717 static struct intel_plane * 14718 intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe) 14719 { 14720 struct intel_plane *plane; 14721 const struct drm_plane_funcs *plane_funcs; 14722 unsigned int supported_rotations; 14723 unsigned int possible_crtcs; 14724 const u64 *modifiers; 14725 const u32 *formats; 14726 int num_formats; 14727 int ret; 14728 14729 if (INTEL_GEN(dev_priv) >= 9) 14730 return skl_universal_plane_create(dev_priv, pipe, 14731 PLANE_PRIMARY); 14732 14733 plane = intel_plane_alloc(); 14734 if (IS_ERR(plane)) 14735 return plane; 14736 14737 plane->pipe = pipe; 14738 /* 14739 * On gen2/3 only plane A can do FBC, but the panel fitter and LVDS 14740 * port is hooked to pipe B. Hence we want plane A feeding pipe B. 14741 */ 14742 if (HAS_FBC(dev_priv) && INTEL_GEN(dev_priv) < 4) 14743 plane->i9xx_plane = (enum i9xx_plane_id) !pipe; 14744 else 14745 plane->i9xx_plane = (enum i9xx_plane_id) pipe; 14746 plane->id = PLANE_PRIMARY; 14747 plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane->id); 14748 14749 plane->has_fbc = i9xx_plane_has_fbc(dev_priv, plane->i9xx_plane); 14750 if (plane->has_fbc) { 14751 struct intel_fbc *fbc = &dev_priv->fbc; 14752 14753 fbc->possible_framebuffer_bits |= plane->frontbuffer_bit; 14754 } 14755 14756 if (INTEL_GEN(dev_priv) >= 4) { 14757 formats = i965_primary_formats; 14758 num_formats = ARRAY_SIZE(i965_primary_formats); 14759 modifiers = i9xx_format_modifiers; 14760 14761 plane->max_stride = i9xx_plane_max_stride; 14762 plane->update_plane = i9xx_update_plane; 14763 plane->disable_plane = i9xx_disable_plane; 14764 plane->get_hw_state = i9xx_plane_get_hw_state; 14765 plane->check_plane = i9xx_plane_check; 14766 14767 plane_funcs = &i965_plane_funcs; 14768 } else { 14769 formats = i8xx_primary_formats; 14770 num_formats = ARRAY_SIZE(i8xx_primary_formats); 14771 modifiers = i9xx_format_modifiers; 14772 14773 plane->max_stride = i9xx_plane_max_stride; 14774 plane->update_plane = i9xx_update_plane; 14775 plane->disable_plane = i9xx_disable_plane; 14776 plane->get_hw_state = i9xx_plane_get_hw_state; 14777 plane->check_plane = i9xx_plane_check; 14778 14779 plane_funcs = &i8xx_plane_funcs; 14780 } 14781 14782 possible_crtcs = BIT(pipe); 14783 14784 if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)) 14785 ret = drm_universal_plane_init(&dev_priv->drm, &plane->base, 14786 possible_crtcs, plane_funcs, 14787 formats, num_formats, modifiers, 14788 DRM_PLANE_TYPE_PRIMARY, 14789 "primary %c", pipe_name(pipe)); 14790 else 14791 ret = drm_universal_plane_init(&dev_priv->drm, &plane->base, 14792 possible_crtcs, plane_funcs, 14793 formats, num_formats, modifiers, 14794 DRM_PLANE_TYPE_PRIMARY, 14795 "plane %c", 14796 plane_name(plane->i9xx_plane)); 14797 if (ret) 14798 goto fail; 14799 14800 if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) { 14801 supported_rotations = 14802 DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | 14803 DRM_MODE_REFLECT_X; 14804 } else if (INTEL_GEN(dev_priv) >= 4) { 14805 supported_rotations = 14806 DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180; 14807 } else { 14808 supported_rotations = DRM_MODE_ROTATE_0; 14809 } 14810 14811 if (INTEL_GEN(dev_priv) >= 4) 14812 drm_plane_create_rotation_property(&plane->base, 14813 DRM_MODE_ROTATE_0, 14814 supported_rotations); 14815 14816 drm_plane_helper_add(&plane->base, &intel_plane_helper_funcs); 14817 14818 return plane; 14819 14820 fail: 14821 intel_plane_free(plane); 14822 14823 return ERR_PTR(ret); 14824 } 14825 14826 static struct intel_plane * 14827 intel_cursor_plane_create(struct drm_i915_private *dev_priv, 14828 enum pipe pipe) 14829 { 14830 unsigned int possible_crtcs; 14831 struct intel_plane *cursor; 14832 int ret; 14833 14834 cursor = intel_plane_alloc(); 14835 if (IS_ERR(cursor)) 14836 return cursor; 14837 14838 cursor->pipe = pipe; 14839 cursor->i9xx_plane = (enum i9xx_plane_id) pipe; 14840 cursor->id = PLANE_CURSOR; 14841 cursor->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, cursor->id); 14842 14843 if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) { 14844 cursor->max_stride = i845_cursor_max_stride; 14845 cursor->update_plane = i845_update_cursor; 14846 cursor->disable_plane = i845_disable_cursor; 14847 cursor->get_hw_state = i845_cursor_get_hw_state; 14848 cursor->check_plane = i845_check_cursor; 14849 } else { 14850 cursor->max_stride = i9xx_cursor_max_stride; 14851 cursor->update_plane = i9xx_update_cursor; 14852 cursor->disable_plane = i9xx_disable_cursor; 14853 cursor->get_hw_state = i9xx_cursor_get_hw_state; 14854 cursor->check_plane = i9xx_check_cursor; 14855 } 14856 14857 cursor->cursor.base = ~0; 14858 cursor->cursor.cntl = ~0; 14859 14860 if (IS_I845G(dev_priv) || IS_I865G(dev_priv) || HAS_CUR_FBC(dev_priv)) 14861 cursor->cursor.size = ~0; 14862 14863 possible_crtcs = BIT(pipe); 14864 14865 ret = drm_universal_plane_init(&dev_priv->drm, &cursor->base, 14866 possible_crtcs, &intel_cursor_plane_funcs, 14867 intel_cursor_formats, 14868 ARRAY_SIZE(intel_cursor_formats), 14869 cursor_format_modifiers, 14870 DRM_PLANE_TYPE_CURSOR, 14871 "cursor %c", pipe_name(pipe)); 14872 if (ret) 14873 goto fail; 14874 14875 if (INTEL_GEN(dev_priv) >= 4) 14876 drm_plane_create_rotation_property(&cursor->base, 14877 DRM_MODE_ROTATE_0, 14878 DRM_MODE_ROTATE_0 | 14879 DRM_MODE_ROTATE_180); 14880 14881 drm_plane_helper_add(&cursor->base, &intel_plane_helper_funcs); 14882 14883 return cursor; 14884 14885 fail: 14886 intel_plane_free(cursor); 14887 14888 return ERR_PTR(ret); 14889 } 14890 14891 static void intel_crtc_init_scalers(struct intel_crtc *crtc, 14892 struct intel_crtc_state *crtc_state) 14893 { 14894 struct intel_crtc_scaler_state *scaler_state = 14895 &crtc_state->scaler_state; 14896 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 14897 int i; 14898 14899 crtc->num_scalers = RUNTIME_INFO(dev_priv)->num_scalers[crtc->pipe]; 14900 if (!crtc->num_scalers) 14901 return; 14902 14903 for (i = 0; i < crtc->num_scalers; i++) { 14904 struct intel_scaler *scaler = &scaler_state->scalers[i]; 14905 14906 scaler->in_use = 0; 14907 scaler->mode = 0; 14908 } 14909 14910 scaler_state->scaler_id = -1; 14911 } 14912 14913 static int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe) 14914 { 14915 struct intel_crtc *intel_crtc; 14916 struct intel_crtc_state *crtc_state = NULL; 14917 struct intel_plane *primary = NULL; 14918 struct intel_plane *cursor = NULL; 14919 int sprite, ret; 14920 14921 intel_crtc = kzalloc(sizeof(*intel_crtc), GFP_KERNEL); 14922 if (!intel_crtc) 14923 return -ENOMEM; 14924 14925 crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); 14926 if (!crtc_state) { 14927 ret = -ENOMEM; 14928 goto fail; 14929 } 14930 __drm_atomic_helper_crtc_reset(&intel_crtc->base, &crtc_state->base); 14931 intel_crtc->config = crtc_state; 14932 14933 primary = intel_primary_plane_create(dev_priv, pipe); 14934 if (IS_ERR(primary)) { 14935 ret = PTR_ERR(primary); 14936 goto fail; 14937 } 14938 intel_crtc->plane_ids_mask |= BIT(primary->id); 14939 14940 for_each_sprite(dev_priv, pipe, sprite) { 14941 struct intel_plane *plane; 14942 14943 plane = intel_sprite_plane_create(dev_priv, pipe, sprite); 14944 if (IS_ERR(plane)) { 14945 ret = PTR_ERR(plane); 14946 goto fail; 14947 } 14948 intel_crtc->plane_ids_mask |= BIT(plane->id); 14949 } 14950 14951 cursor = intel_cursor_plane_create(dev_priv, pipe); 14952 if (IS_ERR(cursor)) { 14953 ret = PTR_ERR(cursor); 14954 goto fail; 14955 } 14956 intel_crtc->plane_ids_mask |= BIT(cursor->id); 14957 14958 ret = drm_crtc_init_with_planes(&dev_priv->drm, &intel_crtc->base, 14959 &primary->base, &cursor->base, 14960 &intel_crtc_funcs, 14961 "pipe %c", pipe_name(pipe)); 14962 if (ret) 14963 goto fail; 14964 14965 intel_crtc->pipe = pipe; 14966 14967 /* initialize shared scalers */ 14968 intel_crtc_init_scalers(intel_crtc, crtc_state); 14969 14970 BUG_ON(pipe >= ARRAY_SIZE(dev_priv->pipe_to_crtc_mapping) || 14971 dev_priv->pipe_to_crtc_mapping[pipe] != NULL); 14972 dev_priv->pipe_to_crtc_mapping[pipe] = intel_crtc; 14973 14974 if (INTEL_GEN(dev_priv) < 9) { 14975 enum i9xx_plane_id i9xx_plane = primary->i9xx_plane; 14976 14977 BUG_ON(i9xx_plane >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) || 14978 dev_priv->plane_to_crtc_mapping[i9xx_plane] != NULL); 14979 dev_priv->plane_to_crtc_mapping[i9xx_plane] = intel_crtc; 14980 } 14981 14982 drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs); 14983 14984 intel_color_init(intel_crtc); 14985 14986 WARN_ON(drm_crtc_index(&intel_crtc->base) != intel_crtc->pipe); 14987 14988 return 0; 14989 14990 fail: 14991 /* 14992 * drm_mode_config_cleanup() will free up any 14993 * crtcs/planes already initialized. 14994 */ 14995 kfree(crtc_state); 14996 kfree(intel_crtc); 14997 14998 return ret; 14999 } 15000 15001 int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data, 15002 struct drm_file *file) 15003 { 15004 struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data; 15005 struct drm_crtc *drmmode_crtc; 15006 struct intel_crtc *crtc; 15007 15008 drmmode_crtc = drm_crtc_find(dev, file, pipe_from_crtc_id->crtc_id); 15009 if (!drmmode_crtc) 15010 return -ENOENT; 15011 15012 crtc = to_intel_crtc(drmmode_crtc); 15013 pipe_from_crtc_id->pipe = crtc->pipe; 15014 15015 return 0; 15016 } 15017 15018 static int intel_encoder_clones(struct intel_encoder *encoder) 15019 { 15020 struct drm_device *dev = encoder->base.dev; 15021 struct intel_encoder *source_encoder; 15022 int index_mask = 0; 15023 int entry = 0; 15024 15025 for_each_intel_encoder(dev, source_encoder) { 15026 if (encoders_cloneable(encoder, source_encoder)) 15027 index_mask |= (1 << entry); 15028 15029 entry++; 15030 } 15031 15032 return index_mask; 15033 } 15034 15035 static bool ilk_has_edp_a(struct drm_i915_private *dev_priv) 15036 { 15037 if (!IS_MOBILE(dev_priv)) 15038 return false; 15039 15040 if ((I915_READ(DP_A) & DP_DETECTED) == 0) 15041 return false; 15042 15043 if (IS_GEN(dev_priv, 5) && (I915_READ(FUSE_STRAP) & ILK_eDP_A_DISABLE)) 15044 return false; 15045 15046 return true; 15047 } 15048 15049 static bool intel_ddi_crt_present(struct drm_i915_private *dev_priv) 15050 { 15051 if (INTEL_GEN(dev_priv) >= 9) 15052 return false; 15053 15054 if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv)) 15055 return false; 15056 15057 if (HAS_PCH_LPT_H(dev_priv) && 15058 I915_READ(SFUSE_STRAP) & SFUSE_STRAP_CRT_DISABLED) 15059 return false; 15060 15061 /* DDI E can't be used if DDI A requires 4 lanes */ 15062 if (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES) 15063 return false; 15064 15065 if (!dev_priv->vbt.int_crt_support) 15066 return false; 15067 15068 return true; 15069 } 15070 15071 void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv) 15072 { 15073 int pps_num; 15074 int pps_idx; 15075 15076 if (HAS_DDI(dev_priv)) 15077 return; 15078 /* 15079 * This w/a is needed at least on CPT/PPT, but to be sure apply it 15080 * everywhere where registers can be write protected. 15081 */ 15082 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 15083 pps_num = 2; 15084 else 15085 pps_num = 1; 15086 15087 for (pps_idx = 0; pps_idx < pps_num; pps_idx++) { 15088 u32 val = I915_READ(PP_CONTROL(pps_idx)); 15089 15090 val = (val & ~PANEL_UNLOCK_MASK) | PANEL_UNLOCK_REGS; 15091 I915_WRITE(PP_CONTROL(pps_idx), val); 15092 } 15093 } 15094 15095 static void intel_pps_init(struct drm_i915_private *dev_priv) 15096 { 15097 if (HAS_PCH_SPLIT(dev_priv) || IS_GEN9_LP(dev_priv)) 15098 dev_priv->pps_mmio_base = PCH_PPS_BASE; 15099 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 15100 dev_priv->pps_mmio_base = VLV_PPS_BASE; 15101 else 15102 dev_priv->pps_mmio_base = PPS_BASE; 15103 15104 intel_pps_unlock_regs_wa(dev_priv); 15105 } 15106 15107 static void intel_setup_outputs(struct drm_i915_private *dev_priv) 15108 { 15109 struct intel_encoder *encoder; 15110 bool dpd_is_edp = false; 15111 15112 intel_pps_init(dev_priv); 15113 15114 if (!HAS_DISPLAY(dev_priv)) 15115 return; 15116 15117 if (IS_ELKHARTLAKE(dev_priv)) { 15118 intel_ddi_init(dev_priv, PORT_A); 15119 intel_ddi_init(dev_priv, PORT_B); 15120 intel_ddi_init(dev_priv, PORT_C); 15121 icl_dsi_init(dev_priv); 15122 } else if (INTEL_GEN(dev_priv) >= 11) { 15123 intel_ddi_init(dev_priv, PORT_A); 15124 intel_ddi_init(dev_priv, PORT_B); 15125 intel_ddi_init(dev_priv, PORT_C); 15126 intel_ddi_init(dev_priv, PORT_D); 15127 intel_ddi_init(dev_priv, PORT_E); 15128 /* 15129 * On some ICL SKUs port F is not present. No strap bits for 15130 * this, so rely on VBT. 15131 * Work around broken VBTs on SKUs known to have no port F. 15132 */ 15133 if (IS_ICL_WITH_PORT_F(dev_priv) && 15134 intel_bios_is_port_present(dev_priv, PORT_F)) 15135 intel_ddi_init(dev_priv, PORT_F); 15136 15137 icl_dsi_init(dev_priv); 15138 } else if (IS_GEN9_LP(dev_priv)) { 15139 /* 15140 * FIXME: Broxton doesn't support port detection via the 15141 * DDI_BUF_CTL_A or SFUSE_STRAP registers, find another way to 15142 * detect the ports. 15143 */ 15144 intel_ddi_init(dev_priv, PORT_A); 15145 intel_ddi_init(dev_priv, PORT_B); 15146 intel_ddi_init(dev_priv, PORT_C); 15147 15148 vlv_dsi_init(dev_priv); 15149 } else if (HAS_DDI(dev_priv)) { 15150 int found; 15151 15152 if (intel_ddi_crt_present(dev_priv)) 15153 intel_crt_init(dev_priv); 15154 15155 /* 15156 * Haswell uses DDI functions to detect digital outputs. 15157 * On SKL pre-D0 the strap isn't connected, so we assume 15158 * it's there. 15159 */ 15160 found = I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_INIT_DISPLAY_DETECTED; 15161 /* WaIgnoreDDIAStrap: skl */ 15162 if (found || IS_GEN9_BC(dev_priv)) 15163 intel_ddi_init(dev_priv, PORT_A); 15164 15165 /* DDI B, C, D, and F detection is indicated by the SFUSE_STRAP 15166 * register */ 15167 found = I915_READ(SFUSE_STRAP); 15168 15169 if (found & SFUSE_STRAP_DDIB_DETECTED) 15170 intel_ddi_init(dev_priv, PORT_B); 15171 if (found & SFUSE_STRAP_DDIC_DETECTED) 15172 intel_ddi_init(dev_priv, PORT_C); 15173 if (found & SFUSE_STRAP_DDID_DETECTED) 15174 intel_ddi_init(dev_priv, PORT_D); 15175 if (found & SFUSE_STRAP_DDIF_DETECTED) 15176 intel_ddi_init(dev_priv, PORT_F); 15177 /* 15178 * On SKL we don't have a way to detect DDI-E so we rely on VBT. 15179 */ 15180 if (IS_GEN9_BC(dev_priv) && 15181 intel_bios_is_port_present(dev_priv, PORT_E)) 15182 intel_ddi_init(dev_priv, PORT_E); 15183 15184 } else if (HAS_PCH_SPLIT(dev_priv)) { 15185 int found; 15186 15187 /* 15188 * intel_edp_init_connector() depends on this completing first, 15189 * to prevent the registration of both eDP and LVDS and the 15190 * incorrect sharing of the PPS. 15191 */ 15192 intel_lvds_init(dev_priv); 15193 intel_crt_init(dev_priv); 15194 15195 dpd_is_edp = intel_dp_is_port_edp(dev_priv, PORT_D); 15196 15197 if (ilk_has_edp_a(dev_priv)) 15198 intel_dp_init(dev_priv, DP_A, PORT_A); 15199 15200 if (I915_READ(PCH_HDMIB) & SDVO_DETECTED) { 15201 /* PCH SDVOB multiplex with HDMIB */ 15202 found = intel_sdvo_init(dev_priv, PCH_SDVOB, PORT_B); 15203 if (!found) 15204 intel_hdmi_init(dev_priv, PCH_HDMIB, PORT_B); 15205 if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED)) 15206 intel_dp_init(dev_priv, PCH_DP_B, PORT_B); 15207 } 15208 15209 if (I915_READ(PCH_HDMIC) & SDVO_DETECTED) 15210 intel_hdmi_init(dev_priv, PCH_HDMIC, PORT_C); 15211 15212 if (!dpd_is_edp && I915_READ(PCH_HDMID) & SDVO_DETECTED) 15213 intel_hdmi_init(dev_priv, PCH_HDMID, PORT_D); 15214 15215 if (I915_READ(PCH_DP_C) & DP_DETECTED) 15216 intel_dp_init(dev_priv, PCH_DP_C, PORT_C); 15217 15218 if (I915_READ(PCH_DP_D) & DP_DETECTED) 15219 intel_dp_init(dev_priv, PCH_DP_D, PORT_D); 15220 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 15221 bool has_edp, has_port; 15222 15223 if (IS_VALLEYVIEW(dev_priv) && dev_priv->vbt.int_crt_support) 15224 intel_crt_init(dev_priv); 15225 15226 /* 15227 * The DP_DETECTED bit is the latched state of the DDC 15228 * SDA pin at boot. However since eDP doesn't require DDC 15229 * (no way to plug in a DP->HDMI dongle) the DDC pins for 15230 * eDP ports may have been muxed to an alternate function. 15231 * Thus we can't rely on the DP_DETECTED bit alone to detect 15232 * eDP ports. Consult the VBT as well as DP_DETECTED to 15233 * detect eDP ports. 15234 * 15235 * Sadly the straps seem to be missing sometimes even for HDMI 15236 * ports (eg. on Voyo V3 - CHT x7-Z8700), so check both strap 15237 * and VBT for the presence of the port. Additionally we can't 15238 * trust the port type the VBT declares as we've seen at least 15239 * HDMI ports that the VBT claim are DP or eDP. 15240 */ 15241 has_edp = intel_dp_is_port_edp(dev_priv, PORT_B); 15242 has_port = intel_bios_is_port_present(dev_priv, PORT_B); 15243 if (I915_READ(VLV_DP_B) & DP_DETECTED || has_port) 15244 has_edp &= intel_dp_init(dev_priv, VLV_DP_B, PORT_B); 15245 if ((I915_READ(VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp) 15246 intel_hdmi_init(dev_priv, VLV_HDMIB, PORT_B); 15247 15248 has_edp = intel_dp_is_port_edp(dev_priv, PORT_C); 15249 has_port = intel_bios_is_port_present(dev_priv, PORT_C); 15250 if (I915_READ(VLV_DP_C) & DP_DETECTED || has_port) 15251 has_edp &= intel_dp_init(dev_priv, VLV_DP_C, PORT_C); 15252 if ((I915_READ(VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp) 15253 intel_hdmi_init(dev_priv, VLV_HDMIC, PORT_C); 15254 15255 if (IS_CHERRYVIEW(dev_priv)) { 15256 /* 15257 * eDP not supported on port D, 15258 * so no need to worry about it 15259 */ 15260 has_port = intel_bios_is_port_present(dev_priv, PORT_D); 15261 if (I915_READ(CHV_DP_D) & DP_DETECTED || has_port) 15262 intel_dp_init(dev_priv, CHV_DP_D, PORT_D); 15263 if (I915_READ(CHV_HDMID) & SDVO_DETECTED || has_port) 15264 intel_hdmi_init(dev_priv, CHV_HDMID, PORT_D); 15265 } 15266 15267 vlv_dsi_init(dev_priv); 15268 } else if (IS_PINEVIEW(dev_priv)) { 15269 intel_lvds_init(dev_priv); 15270 intel_crt_init(dev_priv); 15271 } else if (IS_GEN_RANGE(dev_priv, 3, 4)) { 15272 bool found = false; 15273 15274 if (IS_MOBILE(dev_priv)) 15275 intel_lvds_init(dev_priv); 15276 15277 intel_crt_init(dev_priv); 15278 15279 if (I915_READ(GEN3_SDVOB) & SDVO_DETECTED) { 15280 DRM_DEBUG_KMS("probing SDVOB\n"); 15281 found = intel_sdvo_init(dev_priv, GEN3_SDVOB, PORT_B); 15282 if (!found && IS_G4X(dev_priv)) { 15283 DRM_DEBUG_KMS("probing HDMI on SDVOB\n"); 15284 intel_hdmi_init(dev_priv, GEN4_HDMIB, PORT_B); 15285 } 15286 15287 if (!found && IS_G4X(dev_priv)) 15288 intel_dp_init(dev_priv, DP_B, PORT_B); 15289 } 15290 15291 /* Before G4X SDVOC doesn't have its own detect register */ 15292 15293 if (I915_READ(GEN3_SDVOB) & SDVO_DETECTED) { 15294 DRM_DEBUG_KMS("probing SDVOC\n"); 15295 found = intel_sdvo_init(dev_priv, GEN3_SDVOC, PORT_C); 15296 } 15297 15298 if (!found && (I915_READ(GEN3_SDVOC) & SDVO_DETECTED)) { 15299 15300 if (IS_G4X(dev_priv)) { 15301 DRM_DEBUG_KMS("probing HDMI on SDVOC\n"); 15302 intel_hdmi_init(dev_priv, GEN4_HDMIC, PORT_C); 15303 } 15304 if (IS_G4X(dev_priv)) 15305 intel_dp_init(dev_priv, DP_C, PORT_C); 15306 } 15307 15308 if (IS_G4X(dev_priv) && (I915_READ(DP_D) & DP_DETECTED)) 15309 intel_dp_init(dev_priv, DP_D, PORT_D); 15310 15311 if (SUPPORTS_TV(dev_priv)) 15312 intel_tv_init(dev_priv); 15313 } else if (IS_GEN(dev_priv, 2)) { 15314 if (IS_I85X(dev_priv)) 15315 intel_lvds_init(dev_priv); 15316 15317 intel_crt_init(dev_priv); 15318 intel_dvo_init(dev_priv); 15319 } 15320 15321 intel_psr_init(dev_priv); 15322 15323 for_each_intel_encoder(&dev_priv->drm, encoder) { 15324 encoder->base.possible_crtcs = encoder->crtc_mask; 15325 encoder->base.possible_clones = 15326 intel_encoder_clones(encoder); 15327 } 15328 15329 intel_init_pch_refclk(dev_priv); 15330 15331 drm_helper_move_panel_connectors_to_head(&dev_priv->drm); 15332 } 15333 15334 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) 15335 { 15336 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); 15337 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 15338 15339 drm_framebuffer_cleanup(fb); 15340 15341 i915_gem_object_lock(obj); 15342 WARN_ON(!obj->framebuffer_references--); 15343 i915_gem_object_unlock(obj); 15344 15345 i915_gem_object_put(obj); 15346 15347 kfree(intel_fb); 15348 } 15349 15350 static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb, 15351 struct drm_file *file, 15352 unsigned int *handle) 15353 { 15354 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 15355 15356 if (obj->userptr.mm) { 15357 DRM_DEBUG("attempting to use a userptr for a framebuffer, denied\n"); 15358 return -EINVAL; 15359 } 15360 15361 return drm_gem_handle_create(file, &obj->base, handle); 15362 } 15363 15364 static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, 15365 struct drm_file *file, 15366 unsigned flags, unsigned color, 15367 struct drm_clip_rect *clips, 15368 unsigned num_clips) 15369 { 15370 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 15371 15372 i915_gem_object_flush_if_display(obj); 15373 intel_fb_obj_flush(obj, ORIGIN_DIRTYFB); 15374 15375 return 0; 15376 } 15377 15378 static const struct drm_framebuffer_funcs intel_fb_funcs = { 15379 .destroy = intel_user_framebuffer_destroy, 15380 .create_handle = intel_user_framebuffer_create_handle, 15381 .dirty = intel_user_framebuffer_dirty, 15382 }; 15383 15384 static int intel_framebuffer_init(struct intel_framebuffer *intel_fb, 15385 struct drm_i915_gem_object *obj, 15386 struct drm_mode_fb_cmd2 *mode_cmd) 15387 { 15388 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 15389 struct drm_framebuffer *fb = &intel_fb->base; 15390 u32 max_stride; 15391 unsigned int tiling, stride; 15392 int ret = -EINVAL; 15393 int i; 15394 15395 i915_gem_object_lock(obj); 15396 obj->framebuffer_references++; 15397 tiling = i915_gem_object_get_tiling(obj); 15398 stride = i915_gem_object_get_stride(obj); 15399 i915_gem_object_unlock(obj); 15400 15401 if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) { 15402 /* 15403 * If there's a fence, enforce that 15404 * the fb modifier and tiling mode match. 15405 */ 15406 if (tiling != I915_TILING_NONE && 15407 tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) { 15408 DRM_DEBUG_KMS("tiling_mode doesn't match fb modifier\n"); 15409 goto err; 15410 } 15411 } else { 15412 if (tiling == I915_TILING_X) { 15413 mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED; 15414 } else if (tiling == I915_TILING_Y) { 15415 DRM_DEBUG_KMS("No Y tiling for legacy addfb\n"); 15416 goto err; 15417 } 15418 } 15419 15420 if (!drm_any_plane_has_format(&dev_priv->drm, 15421 mode_cmd->pixel_format, 15422 mode_cmd->modifier[0])) { 15423 struct drm_format_name_buf format_name; 15424 15425 DRM_DEBUG_KMS("unsupported pixel format %s / modifier 0x%llx\n", 15426 drm_get_format_name(mode_cmd->pixel_format, 15427 &format_name), 15428 mode_cmd->modifier[0]); 15429 goto err; 15430 } 15431 15432 /* 15433 * gen2/3 display engine uses the fence if present, 15434 * so the tiling mode must match the fb modifier exactly. 15435 */ 15436 if (INTEL_GEN(dev_priv) < 4 && 15437 tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) { 15438 DRM_DEBUG_KMS("tiling_mode must match fb modifier exactly on gen2/3\n"); 15439 goto err; 15440 } 15441 15442 max_stride = intel_fb_max_stride(dev_priv, mode_cmd->pixel_format, 15443 mode_cmd->modifier[0]); 15444 if (mode_cmd->pitches[0] > max_stride) { 15445 DRM_DEBUG_KMS("%s pitch (%u) must be at most %d\n", 15446 mode_cmd->modifier[0] != DRM_FORMAT_MOD_LINEAR ? 15447 "tiled" : "linear", 15448 mode_cmd->pitches[0], max_stride); 15449 goto err; 15450 } 15451 15452 /* 15453 * If there's a fence, enforce that 15454 * the fb pitch and fence stride match. 15455 */ 15456 if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) { 15457 DRM_DEBUG_KMS("pitch (%d) must match tiling stride (%d)\n", 15458 mode_cmd->pitches[0], stride); 15459 goto err; 15460 } 15461 15462 /* FIXME need to adjust LINOFF/TILEOFF accordingly. */ 15463 if (mode_cmd->offsets[0] != 0) 15464 goto err; 15465 15466 drm_helper_mode_fill_fb_struct(&dev_priv->drm, fb, mode_cmd); 15467 15468 for (i = 0; i < fb->format->num_planes; i++) { 15469 u32 stride_alignment; 15470 15471 if (mode_cmd->handles[i] != mode_cmd->handles[0]) { 15472 DRM_DEBUG_KMS("bad plane %d handle\n", i); 15473 goto err; 15474 } 15475 15476 stride_alignment = intel_fb_stride_alignment(fb, i); 15477 15478 /* 15479 * Display WA #0531: skl,bxt,kbl,glk 15480 * 15481 * Render decompression and plane width > 3840 15482 * combined with horizontal panning requires the 15483 * plane stride to be a multiple of 4. We'll just 15484 * require the entire fb to accommodate that to avoid 15485 * potential runtime errors at plane configuration time. 15486 */ 15487 if (IS_GEN(dev_priv, 9) && i == 0 && fb->width > 3840 && 15488 is_ccs_modifier(fb->modifier)) 15489 stride_alignment *= 4; 15490 15491 if (fb->pitches[i] & (stride_alignment - 1)) { 15492 DRM_DEBUG_KMS("plane %d pitch (%d) must be at least %u byte aligned\n", 15493 i, fb->pitches[i], stride_alignment); 15494 goto err; 15495 } 15496 15497 fb->obj[i] = &obj->base; 15498 } 15499 15500 ret = intel_fill_fb_info(dev_priv, fb); 15501 if (ret) 15502 goto err; 15503 15504 ret = drm_framebuffer_init(&dev_priv->drm, fb, &intel_fb_funcs); 15505 if (ret) { 15506 DRM_ERROR("framebuffer init failed %d\n", ret); 15507 goto err; 15508 } 15509 15510 return 0; 15511 15512 err: 15513 i915_gem_object_lock(obj); 15514 obj->framebuffer_references--; 15515 i915_gem_object_unlock(obj); 15516 return ret; 15517 } 15518 15519 static struct drm_framebuffer * 15520 intel_user_framebuffer_create(struct drm_device *dev, 15521 struct drm_file *filp, 15522 const struct drm_mode_fb_cmd2 *user_mode_cmd) 15523 { 15524 struct drm_framebuffer *fb; 15525 struct drm_i915_gem_object *obj; 15526 struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd; 15527 15528 obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]); 15529 if (!obj) 15530 return ERR_PTR(-ENOENT); 15531 15532 fb = intel_framebuffer_create(obj, &mode_cmd); 15533 if (IS_ERR(fb)) 15534 i915_gem_object_put(obj); 15535 15536 return fb; 15537 } 15538 15539 static void intel_atomic_state_free(struct drm_atomic_state *state) 15540 { 15541 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 15542 15543 drm_atomic_state_default_release(state); 15544 15545 i915_sw_fence_fini(&intel_state->commit_ready); 15546 15547 kfree(state); 15548 } 15549 15550 static enum drm_mode_status 15551 intel_mode_valid(struct drm_device *dev, 15552 const struct drm_display_mode *mode) 15553 { 15554 struct drm_i915_private *dev_priv = to_i915(dev); 15555 int hdisplay_max, htotal_max; 15556 int vdisplay_max, vtotal_max; 15557 15558 /* 15559 * Can't reject DBLSCAN here because Xorg ddxen can add piles 15560 * of DBLSCAN modes to the output's mode list when they detect 15561 * the scaling mode property on the connector. And they don't 15562 * ask the kernel to validate those modes in any way until 15563 * modeset time at which point the client gets a protocol error. 15564 * So in order to not upset those clients we silently ignore the 15565 * DBLSCAN flag on such connectors. For other connectors we will 15566 * reject modes with the DBLSCAN flag in encoder->compute_config(). 15567 * And we always reject DBLSCAN modes in connector->mode_valid() 15568 * as we never want such modes on the connector's mode list. 15569 */ 15570 15571 if (mode->vscan > 1) 15572 return MODE_NO_VSCAN; 15573 15574 if (mode->flags & DRM_MODE_FLAG_HSKEW) 15575 return MODE_H_ILLEGAL; 15576 15577 if (mode->flags & (DRM_MODE_FLAG_CSYNC | 15578 DRM_MODE_FLAG_NCSYNC | 15579 DRM_MODE_FLAG_PCSYNC)) 15580 return MODE_HSYNC; 15581 15582 if (mode->flags & (DRM_MODE_FLAG_BCAST | 15583 DRM_MODE_FLAG_PIXMUX | 15584 DRM_MODE_FLAG_CLKDIV2)) 15585 return MODE_BAD; 15586 15587 if (INTEL_GEN(dev_priv) >= 9 || 15588 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) { 15589 hdisplay_max = 8192; /* FDI max 4096 handled elsewhere */ 15590 vdisplay_max = 4096; 15591 htotal_max = 8192; 15592 vtotal_max = 8192; 15593 } else if (INTEL_GEN(dev_priv) >= 3) { 15594 hdisplay_max = 4096; 15595 vdisplay_max = 4096; 15596 htotal_max = 8192; 15597 vtotal_max = 8192; 15598 } else { 15599 hdisplay_max = 2048; 15600 vdisplay_max = 2048; 15601 htotal_max = 4096; 15602 vtotal_max = 4096; 15603 } 15604 15605 if (mode->hdisplay > hdisplay_max || 15606 mode->hsync_start > htotal_max || 15607 mode->hsync_end > htotal_max || 15608 mode->htotal > htotal_max) 15609 return MODE_H_ILLEGAL; 15610 15611 if (mode->vdisplay > vdisplay_max || 15612 mode->vsync_start > vtotal_max || 15613 mode->vsync_end > vtotal_max || 15614 mode->vtotal > vtotal_max) 15615 return MODE_V_ILLEGAL; 15616 15617 return MODE_OK; 15618 } 15619 15620 static const struct drm_mode_config_funcs intel_mode_funcs = { 15621 .fb_create = intel_user_framebuffer_create, 15622 .get_format_info = intel_get_format_info, 15623 .output_poll_changed = intel_fbdev_output_poll_changed, 15624 .mode_valid = intel_mode_valid, 15625 .atomic_check = intel_atomic_check, 15626 .atomic_commit = intel_atomic_commit, 15627 .atomic_state_alloc = intel_atomic_state_alloc, 15628 .atomic_state_clear = intel_atomic_state_clear, 15629 .atomic_state_free = intel_atomic_state_free, 15630 }; 15631 15632 /** 15633 * intel_init_display_hooks - initialize the display modesetting hooks 15634 * @dev_priv: device private 15635 */ 15636 void intel_init_display_hooks(struct drm_i915_private *dev_priv) 15637 { 15638 intel_init_cdclk_hooks(dev_priv); 15639 15640 if (INTEL_GEN(dev_priv) >= 9) { 15641 dev_priv->display.get_pipe_config = haswell_get_pipe_config; 15642 dev_priv->display.get_initial_plane_config = 15643 skylake_get_initial_plane_config; 15644 dev_priv->display.crtc_compute_clock = 15645 haswell_crtc_compute_clock; 15646 dev_priv->display.crtc_enable = haswell_crtc_enable; 15647 dev_priv->display.crtc_disable = haswell_crtc_disable; 15648 } else if (HAS_DDI(dev_priv)) { 15649 dev_priv->display.get_pipe_config = haswell_get_pipe_config; 15650 dev_priv->display.get_initial_plane_config = 15651 i9xx_get_initial_plane_config; 15652 dev_priv->display.crtc_compute_clock = 15653 haswell_crtc_compute_clock; 15654 dev_priv->display.crtc_enable = haswell_crtc_enable; 15655 dev_priv->display.crtc_disable = haswell_crtc_disable; 15656 } else if (HAS_PCH_SPLIT(dev_priv)) { 15657 dev_priv->display.get_pipe_config = ironlake_get_pipe_config; 15658 dev_priv->display.get_initial_plane_config = 15659 i9xx_get_initial_plane_config; 15660 dev_priv->display.crtc_compute_clock = 15661 ironlake_crtc_compute_clock; 15662 dev_priv->display.crtc_enable = ironlake_crtc_enable; 15663 dev_priv->display.crtc_disable = ironlake_crtc_disable; 15664 } else if (IS_CHERRYVIEW(dev_priv)) { 15665 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15666 dev_priv->display.get_initial_plane_config = 15667 i9xx_get_initial_plane_config; 15668 dev_priv->display.crtc_compute_clock = chv_crtc_compute_clock; 15669 dev_priv->display.crtc_enable = valleyview_crtc_enable; 15670 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15671 } else if (IS_VALLEYVIEW(dev_priv)) { 15672 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15673 dev_priv->display.get_initial_plane_config = 15674 i9xx_get_initial_plane_config; 15675 dev_priv->display.crtc_compute_clock = vlv_crtc_compute_clock; 15676 dev_priv->display.crtc_enable = valleyview_crtc_enable; 15677 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15678 } else if (IS_G4X(dev_priv)) { 15679 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15680 dev_priv->display.get_initial_plane_config = 15681 i9xx_get_initial_plane_config; 15682 dev_priv->display.crtc_compute_clock = g4x_crtc_compute_clock; 15683 dev_priv->display.crtc_enable = i9xx_crtc_enable; 15684 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15685 } else if (IS_PINEVIEW(dev_priv)) { 15686 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15687 dev_priv->display.get_initial_plane_config = 15688 i9xx_get_initial_plane_config; 15689 dev_priv->display.crtc_compute_clock = pnv_crtc_compute_clock; 15690 dev_priv->display.crtc_enable = i9xx_crtc_enable; 15691 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15692 } else if (!IS_GEN(dev_priv, 2)) { 15693 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15694 dev_priv->display.get_initial_plane_config = 15695 i9xx_get_initial_plane_config; 15696 dev_priv->display.crtc_compute_clock = i9xx_crtc_compute_clock; 15697 dev_priv->display.crtc_enable = i9xx_crtc_enable; 15698 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15699 } else { 15700 dev_priv->display.get_pipe_config = i9xx_get_pipe_config; 15701 dev_priv->display.get_initial_plane_config = 15702 i9xx_get_initial_plane_config; 15703 dev_priv->display.crtc_compute_clock = i8xx_crtc_compute_clock; 15704 dev_priv->display.crtc_enable = i9xx_crtc_enable; 15705 dev_priv->display.crtc_disable = i9xx_crtc_disable; 15706 } 15707 15708 if (IS_GEN(dev_priv, 5)) { 15709 dev_priv->display.fdi_link_train = ironlake_fdi_link_train; 15710 } else if (IS_GEN(dev_priv, 6)) { 15711 dev_priv->display.fdi_link_train = gen6_fdi_link_train; 15712 } else if (IS_IVYBRIDGE(dev_priv)) { 15713 /* FIXME: detect B0+ stepping and use auto training */ 15714 dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train; 15715 } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 15716 dev_priv->display.fdi_link_train = hsw_fdi_link_train; 15717 } 15718 15719 if (INTEL_GEN(dev_priv) >= 9) 15720 dev_priv->display.update_crtcs = skl_update_crtcs; 15721 else 15722 dev_priv->display.update_crtcs = intel_update_crtcs; 15723 } 15724 15725 static i915_reg_t i915_vgacntrl_reg(struct drm_i915_private *dev_priv) 15726 { 15727 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 15728 return VLV_VGACNTRL; 15729 else if (INTEL_GEN(dev_priv) >= 5) 15730 return CPU_VGACNTRL; 15731 else 15732 return VGACNTRL; 15733 } 15734 15735 /* Disable the VGA plane that we never use */ 15736 static void i915_disable_vga(struct drm_i915_private *dev_priv) 15737 { 15738 struct pci_dev *pdev = dev_priv->drm.pdev; 15739 u8 sr1; 15740 i915_reg_t vga_reg = i915_vgacntrl_reg(dev_priv); 15741 15742 /* WaEnableVGAAccessThroughIOPort:ctg,elk,ilk,snb,ivb,vlv,hsw */ 15743 vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); 15744 outb(SR01, VGA_SR_INDEX); 15745 sr1 = inb(VGA_SR_DATA); 15746 outb(sr1 | 1<<5, VGA_SR_DATA); 15747 vga_put(pdev, VGA_RSRC_LEGACY_IO); 15748 udelay(300); 15749 15750 I915_WRITE(vga_reg, VGA_DISP_DISABLE); 15751 POSTING_READ(vga_reg); 15752 } 15753 15754 void intel_modeset_init_hw(struct drm_device *dev) 15755 { 15756 struct drm_i915_private *dev_priv = to_i915(dev); 15757 15758 intel_update_cdclk(dev_priv); 15759 intel_dump_cdclk_state(&dev_priv->cdclk.hw, "Current CDCLK"); 15760 dev_priv->cdclk.logical = dev_priv->cdclk.actual = dev_priv->cdclk.hw; 15761 } 15762 15763 /* 15764 * Calculate what we think the watermarks should be for the state we've read 15765 * out of the hardware and then immediately program those watermarks so that 15766 * we ensure the hardware settings match our internal state. 15767 * 15768 * We can calculate what we think WM's should be by creating a duplicate of the 15769 * current state (which was constructed during hardware readout) and running it 15770 * through the atomic check code to calculate new watermark values in the 15771 * state object. 15772 */ 15773 static void sanitize_watermarks(struct drm_device *dev) 15774 { 15775 struct drm_i915_private *dev_priv = to_i915(dev); 15776 struct drm_atomic_state *state; 15777 struct intel_atomic_state *intel_state; 15778 struct drm_crtc *crtc; 15779 struct drm_crtc_state *cstate; 15780 struct drm_modeset_acquire_ctx ctx; 15781 int ret; 15782 int i; 15783 15784 /* Only supported on platforms that use atomic watermark design */ 15785 if (!dev_priv->display.optimize_watermarks) 15786 return; 15787 15788 /* 15789 * We need to hold connection_mutex before calling duplicate_state so 15790 * that the connector loop is protected. 15791 */ 15792 drm_modeset_acquire_init(&ctx, 0); 15793 retry: 15794 ret = drm_modeset_lock_all_ctx(dev, &ctx); 15795 if (ret == -EDEADLK) { 15796 drm_modeset_backoff(&ctx); 15797 goto retry; 15798 } else if (WARN_ON(ret)) { 15799 goto fail; 15800 } 15801 15802 state = drm_atomic_helper_duplicate_state(dev, &ctx); 15803 if (WARN_ON(IS_ERR(state))) 15804 goto fail; 15805 15806 intel_state = to_intel_atomic_state(state); 15807 15808 /* 15809 * Hardware readout is the only time we don't want to calculate 15810 * intermediate watermarks (since we don't trust the current 15811 * watermarks). 15812 */ 15813 if (!HAS_GMCH(dev_priv)) 15814 intel_state->skip_intermediate_wm = true; 15815 15816 ret = intel_atomic_check(dev, state); 15817 if (ret) { 15818 /* 15819 * If we fail here, it means that the hardware appears to be 15820 * programmed in a way that shouldn't be possible, given our 15821 * understanding of watermark requirements. This might mean a 15822 * mistake in the hardware readout code or a mistake in the 15823 * watermark calculations for a given platform. Raise a WARN 15824 * so that this is noticeable. 15825 * 15826 * If this actually happens, we'll have to just leave the 15827 * BIOS-programmed watermarks untouched and hope for the best. 15828 */ 15829 WARN(true, "Could not determine valid watermarks for inherited state\n"); 15830 goto put_state; 15831 } 15832 15833 /* Write calculated watermark values back */ 15834 for_each_new_crtc_in_state(state, crtc, cstate, i) { 15835 struct intel_crtc_state *cs = to_intel_crtc_state(cstate); 15836 15837 cs->wm.need_postvbl_update = true; 15838 dev_priv->display.optimize_watermarks(intel_state, cs); 15839 15840 to_intel_crtc_state(crtc->state)->wm = cs->wm; 15841 } 15842 15843 put_state: 15844 drm_atomic_state_put(state); 15845 fail: 15846 drm_modeset_drop_locks(&ctx); 15847 drm_modeset_acquire_fini(&ctx); 15848 } 15849 15850 static void intel_update_fdi_pll_freq(struct drm_i915_private *dev_priv) 15851 { 15852 if (IS_GEN(dev_priv, 5)) { 15853 u32 fdi_pll_clk = 15854 I915_READ(FDI_PLL_BIOS_0) & FDI_PLL_FB_CLOCK_MASK; 15855 15856 dev_priv->fdi_pll_freq = (fdi_pll_clk + 2) * 10000; 15857 } else if (IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv)) { 15858 dev_priv->fdi_pll_freq = 270000; 15859 } else { 15860 return; 15861 } 15862 15863 DRM_DEBUG_DRIVER("FDI PLL freq=%d\n", dev_priv->fdi_pll_freq); 15864 } 15865 15866 static int intel_initial_commit(struct drm_device *dev) 15867 { 15868 struct drm_atomic_state *state = NULL; 15869 struct drm_modeset_acquire_ctx ctx; 15870 struct drm_crtc *crtc; 15871 struct drm_crtc_state *crtc_state; 15872 int ret = 0; 15873 15874 state = drm_atomic_state_alloc(dev); 15875 if (!state) 15876 return -ENOMEM; 15877 15878 drm_modeset_acquire_init(&ctx, 0); 15879 15880 retry: 15881 state->acquire_ctx = &ctx; 15882 15883 drm_for_each_crtc(crtc, dev) { 15884 crtc_state = drm_atomic_get_crtc_state(state, crtc); 15885 if (IS_ERR(crtc_state)) { 15886 ret = PTR_ERR(crtc_state); 15887 goto out; 15888 } 15889 15890 if (crtc_state->active) { 15891 ret = drm_atomic_add_affected_planes(state, crtc); 15892 if (ret) 15893 goto out; 15894 15895 /* 15896 * FIXME hack to force a LUT update to avoid the 15897 * plane update forcing the pipe gamma on without 15898 * having a proper LUT loaded. Remove once we 15899 * have readout for pipe gamma enable. 15900 */ 15901 crtc_state->color_mgmt_changed = true; 15902 } 15903 } 15904 15905 ret = drm_atomic_commit(state); 15906 15907 out: 15908 if (ret == -EDEADLK) { 15909 drm_atomic_state_clear(state); 15910 drm_modeset_backoff(&ctx); 15911 goto retry; 15912 } 15913 15914 drm_atomic_state_put(state); 15915 15916 drm_modeset_drop_locks(&ctx); 15917 drm_modeset_acquire_fini(&ctx); 15918 15919 return ret; 15920 } 15921 15922 int intel_modeset_init(struct drm_device *dev) 15923 { 15924 struct drm_i915_private *dev_priv = to_i915(dev); 15925 struct i915_ggtt *ggtt = &dev_priv->ggtt; 15926 enum pipe pipe; 15927 struct intel_crtc *crtc; 15928 int ret; 15929 15930 dev_priv->modeset_wq = alloc_ordered_workqueue("i915_modeset", 0); 15931 15932 drm_mode_config_init(dev); 15933 15934 ret = intel_bw_init(dev_priv); 15935 if (ret) 15936 return ret; 15937 15938 dev->mode_config.min_width = 0; 15939 dev->mode_config.min_height = 0; 15940 15941 dev->mode_config.preferred_depth = 24; 15942 dev->mode_config.prefer_shadow = 1; 15943 15944 dev->mode_config.allow_fb_modifiers = true; 15945 15946 dev->mode_config.funcs = &intel_mode_funcs; 15947 15948 init_llist_head(&dev_priv->atomic_helper.free_list); 15949 INIT_WORK(&dev_priv->atomic_helper.free_work, 15950 intel_atomic_helper_free_state_worker); 15951 15952 intel_init_quirks(dev_priv); 15953 15954 intel_fbc_init(dev_priv); 15955 15956 intel_init_pm(dev_priv); 15957 15958 /* 15959 * There may be no VBT; and if the BIOS enabled SSC we can 15960 * just keep using it to avoid unnecessary flicker. Whereas if the 15961 * BIOS isn't using it, don't assume it will work even if the VBT 15962 * indicates as much. 15963 */ 15964 if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)) { 15965 bool bios_lvds_use_ssc = !!(I915_READ(PCH_DREF_CONTROL) & 15966 DREF_SSC1_ENABLE); 15967 15968 if (dev_priv->vbt.lvds_use_ssc != bios_lvds_use_ssc) { 15969 DRM_DEBUG_KMS("SSC %sabled by BIOS, overriding VBT which says %sabled\n", 15970 bios_lvds_use_ssc ? "en" : "dis", 15971 dev_priv->vbt.lvds_use_ssc ? "en" : "dis"); 15972 dev_priv->vbt.lvds_use_ssc = bios_lvds_use_ssc; 15973 } 15974 } 15975 15976 /* 15977 * Maximum framebuffer dimensions, chosen to match 15978 * the maximum render engine surface size on gen4+. 15979 */ 15980 if (INTEL_GEN(dev_priv) >= 7) { 15981 dev->mode_config.max_width = 16384; 15982 dev->mode_config.max_height = 16384; 15983 } else if (INTEL_GEN(dev_priv) >= 4) { 15984 dev->mode_config.max_width = 8192; 15985 dev->mode_config.max_height = 8192; 15986 } else if (IS_GEN(dev_priv, 3)) { 15987 dev->mode_config.max_width = 4096; 15988 dev->mode_config.max_height = 4096; 15989 } else { 15990 dev->mode_config.max_width = 2048; 15991 dev->mode_config.max_height = 2048; 15992 } 15993 15994 if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) { 15995 dev->mode_config.cursor_width = IS_I845G(dev_priv) ? 64 : 512; 15996 dev->mode_config.cursor_height = 1023; 15997 } else if (IS_GEN(dev_priv, 2)) { 15998 dev->mode_config.cursor_width = 64; 15999 dev->mode_config.cursor_height = 64; 16000 } else { 16001 dev->mode_config.cursor_width = 256; 16002 dev->mode_config.cursor_height = 256; 16003 } 16004 16005 dev->mode_config.fb_base = ggtt->gmadr.start; 16006 16007 DRM_DEBUG_KMS("%d display pipe%s available.\n", 16008 INTEL_INFO(dev_priv)->num_pipes, 16009 INTEL_INFO(dev_priv)->num_pipes > 1 ? "s" : ""); 16010 16011 for_each_pipe(dev_priv, pipe) { 16012 ret = intel_crtc_init(dev_priv, pipe); 16013 if (ret) { 16014 drm_mode_config_cleanup(dev); 16015 return ret; 16016 } 16017 } 16018 16019 intel_shared_dpll_init(dev); 16020 intel_update_fdi_pll_freq(dev_priv); 16021 16022 intel_update_czclk(dev_priv); 16023 intel_modeset_init_hw(dev); 16024 16025 intel_hdcp_component_init(dev_priv); 16026 16027 if (dev_priv->max_cdclk_freq == 0) 16028 intel_update_max_cdclk(dev_priv); 16029 16030 /* Just disable it once at startup */ 16031 i915_disable_vga(dev_priv); 16032 intel_setup_outputs(dev_priv); 16033 16034 drm_modeset_lock_all(dev); 16035 intel_modeset_setup_hw_state(dev, dev->mode_config.acquire_ctx); 16036 drm_modeset_unlock_all(dev); 16037 16038 for_each_intel_crtc(dev, crtc) { 16039 struct intel_initial_plane_config plane_config = {}; 16040 16041 if (!crtc->active) 16042 continue; 16043 16044 /* 16045 * Note that reserving the BIOS fb up front prevents us 16046 * from stuffing other stolen allocations like the ring 16047 * on top. This prevents some ugliness at boot time, and 16048 * can even allow for smooth boot transitions if the BIOS 16049 * fb is large enough for the active pipe configuration. 16050 */ 16051 dev_priv->display.get_initial_plane_config(crtc, 16052 &plane_config); 16053 16054 /* 16055 * If the fb is shared between multiple heads, we'll 16056 * just get the first one. 16057 */ 16058 intel_find_initial_plane_obj(crtc, &plane_config); 16059 } 16060 16061 /* 16062 * Make sure hardware watermarks really match the state we read out. 16063 * Note that we need to do this after reconstructing the BIOS fb's 16064 * since the watermark calculation done here will use pstate->fb. 16065 */ 16066 if (!HAS_GMCH(dev_priv)) 16067 sanitize_watermarks(dev); 16068 16069 /* 16070 * Force all active planes to recompute their states. So that on 16071 * mode_setcrtc after probe, all the intel_plane_state variables 16072 * are already calculated and there is no assert_plane warnings 16073 * during bootup. 16074 */ 16075 ret = intel_initial_commit(dev); 16076 if (ret) 16077 DRM_DEBUG_KMS("Initial commit in probe failed.\n"); 16078 16079 return 0; 16080 } 16081 16082 void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) 16083 { 16084 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 16085 /* 640x480@60Hz, ~25175 kHz */ 16086 struct dpll clock = { 16087 .m1 = 18, 16088 .m2 = 7, 16089 .p1 = 13, 16090 .p2 = 4, 16091 .n = 2, 16092 }; 16093 u32 dpll, fp; 16094 int i; 16095 16096 WARN_ON(i9xx_calc_dpll_params(48000, &clock) != 25154); 16097 16098 DRM_DEBUG_KMS("enabling pipe %c due to force quirk (vco=%d dot=%d)\n", 16099 pipe_name(pipe), clock.vco, clock.dot); 16100 16101 fp = i9xx_dpll_compute_fp(&clock); 16102 dpll = DPLL_DVO_2X_MODE | 16103 DPLL_VGA_MODE_DIS | 16104 ((clock.p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT) | 16105 PLL_P2_DIVIDE_BY_4 | 16106 PLL_REF_INPUT_DREFCLK | 16107 DPLL_VCO_ENABLE; 16108 16109 I915_WRITE(FP0(pipe), fp); 16110 I915_WRITE(FP1(pipe), fp); 16111 16112 I915_WRITE(HTOTAL(pipe), (640 - 1) | ((800 - 1) << 16)); 16113 I915_WRITE(HBLANK(pipe), (640 - 1) | ((800 - 1) << 16)); 16114 I915_WRITE(HSYNC(pipe), (656 - 1) | ((752 - 1) << 16)); 16115 I915_WRITE(VTOTAL(pipe), (480 - 1) | ((525 - 1) << 16)); 16116 I915_WRITE(VBLANK(pipe), (480 - 1) | ((525 - 1) << 16)); 16117 I915_WRITE(VSYNC(pipe), (490 - 1) | ((492 - 1) << 16)); 16118 I915_WRITE(PIPESRC(pipe), ((640 - 1) << 16) | (480 - 1)); 16119 16120 /* 16121 * Apparently we need to have VGA mode enabled prior to changing 16122 * the P1/P2 dividers. Otherwise the DPLL will keep using the old 16123 * dividers, even though the register value does change. 16124 */ 16125 I915_WRITE(DPLL(pipe), dpll & ~DPLL_VGA_MODE_DIS); 16126 I915_WRITE(DPLL(pipe), dpll); 16127 16128 /* Wait for the clocks to stabilize. */ 16129 POSTING_READ(DPLL(pipe)); 16130 udelay(150); 16131 16132 /* The pixel multiplier can only be updated once the 16133 * DPLL is enabled and the clocks are stable. 16134 * 16135 * So write it again. 16136 */ 16137 I915_WRITE(DPLL(pipe), dpll); 16138 16139 /* We do this three times for luck */ 16140 for (i = 0; i < 3 ; i++) { 16141 I915_WRITE(DPLL(pipe), dpll); 16142 POSTING_READ(DPLL(pipe)); 16143 udelay(150); /* wait for warmup */ 16144 } 16145 16146 I915_WRITE(PIPECONF(pipe), PIPECONF_ENABLE | PIPECONF_PROGRESSIVE); 16147 POSTING_READ(PIPECONF(pipe)); 16148 16149 intel_wait_for_pipe_scanline_moving(crtc); 16150 } 16151 16152 void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe) 16153 { 16154 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 16155 16156 DRM_DEBUG_KMS("disabling pipe %c due to force quirk\n", 16157 pipe_name(pipe)); 16158 16159 WARN_ON(I915_READ(DSPCNTR(PLANE_A)) & DISPLAY_PLANE_ENABLE); 16160 WARN_ON(I915_READ(DSPCNTR(PLANE_B)) & DISPLAY_PLANE_ENABLE); 16161 WARN_ON(I915_READ(DSPCNTR(PLANE_C)) & DISPLAY_PLANE_ENABLE); 16162 WARN_ON(I915_READ(CURCNTR(PIPE_A)) & MCURSOR_MODE); 16163 WARN_ON(I915_READ(CURCNTR(PIPE_B)) & MCURSOR_MODE); 16164 16165 I915_WRITE(PIPECONF(pipe), 0); 16166 POSTING_READ(PIPECONF(pipe)); 16167 16168 intel_wait_for_pipe_scanline_stopped(crtc); 16169 16170 I915_WRITE(DPLL(pipe), DPLL_VGA_MODE_DIS); 16171 POSTING_READ(DPLL(pipe)); 16172 } 16173 16174 static void 16175 intel_sanitize_plane_mapping(struct drm_i915_private *dev_priv) 16176 { 16177 struct intel_crtc *crtc; 16178 16179 if (INTEL_GEN(dev_priv) >= 4) 16180 return; 16181 16182 for_each_intel_crtc(&dev_priv->drm, crtc) { 16183 struct intel_plane *plane = 16184 to_intel_plane(crtc->base.primary); 16185 struct intel_crtc *plane_crtc; 16186 enum pipe pipe; 16187 16188 if (!plane->get_hw_state(plane, &pipe)) 16189 continue; 16190 16191 if (pipe == crtc->pipe) 16192 continue; 16193 16194 DRM_DEBUG_KMS("[PLANE:%d:%s] attached to the wrong pipe, disabling plane\n", 16195 plane->base.base.id, plane->base.name); 16196 16197 plane_crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 16198 intel_plane_disable_noatomic(plane_crtc, plane); 16199 } 16200 } 16201 16202 static bool intel_crtc_has_encoders(struct intel_crtc *crtc) 16203 { 16204 struct drm_device *dev = crtc->base.dev; 16205 struct intel_encoder *encoder; 16206 16207 for_each_encoder_on_crtc(dev, &crtc->base, encoder) 16208 return true; 16209 16210 return false; 16211 } 16212 16213 static struct intel_connector *intel_encoder_find_connector(struct intel_encoder *encoder) 16214 { 16215 struct drm_device *dev = encoder->base.dev; 16216 struct intel_connector *connector; 16217 16218 for_each_connector_on_encoder(dev, &encoder->base, connector) 16219 return connector; 16220 16221 return NULL; 16222 } 16223 16224 static bool has_pch_trancoder(struct drm_i915_private *dev_priv, 16225 enum pipe pch_transcoder) 16226 { 16227 return HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv) || 16228 (HAS_PCH_LPT_H(dev_priv) && pch_transcoder == PIPE_A); 16229 } 16230 16231 static void intel_sanitize_crtc(struct intel_crtc *crtc, 16232 struct drm_modeset_acquire_ctx *ctx) 16233 { 16234 struct drm_device *dev = crtc->base.dev; 16235 struct drm_i915_private *dev_priv = to_i915(dev); 16236 struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state); 16237 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 16238 16239 /* Clear any frame start delays used for debugging left by the BIOS */ 16240 if (crtc->active && !transcoder_is_dsi(cpu_transcoder)) { 16241 i915_reg_t reg = PIPECONF(cpu_transcoder); 16242 16243 I915_WRITE(reg, 16244 I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK); 16245 } 16246 16247 if (crtc_state->base.active) { 16248 struct intel_plane *plane; 16249 16250 /* Disable everything but the primary plane */ 16251 for_each_intel_plane_on_crtc(dev, crtc, plane) { 16252 const struct intel_plane_state *plane_state = 16253 to_intel_plane_state(plane->base.state); 16254 16255 if (plane_state->base.visible && 16256 plane->base.type != DRM_PLANE_TYPE_PRIMARY) 16257 intel_plane_disable_noatomic(crtc, plane); 16258 } 16259 16260 /* 16261 * Disable any background color set by the BIOS, but enable the 16262 * gamma and CSC to match how we program our planes. 16263 */ 16264 if (INTEL_GEN(dev_priv) >= 9) 16265 I915_WRITE(SKL_BOTTOM_COLOR(crtc->pipe), 16266 SKL_BOTTOM_COLOR_GAMMA_ENABLE | 16267 SKL_BOTTOM_COLOR_CSC_ENABLE); 16268 } 16269 16270 /* Adjust the state of the output pipe according to whether we 16271 * have active connectors/encoders. */ 16272 if (crtc_state->base.active && !intel_crtc_has_encoders(crtc)) 16273 intel_crtc_disable_noatomic(&crtc->base, ctx); 16274 16275 if (crtc_state->base.active || HAS_GMCH(dev_priv)) { 16276 /* 16277 * We start out with underrun reporting disabled to avoid races. 16278 * For correct bookkeeping mark this on active crtcs. 16279 * 16280 * Also on gmch platforms we dont have any hardware bits to 16281 * disable the underrun reporting. Which means we need to start 16282 * out with underrun reporting disabled also on inactive pipes, 16283 * since otherwise we'll complain about the garbage we read when 16284 * e.g. coming up after runtime pm. 16285 * 16286 * No protection against concurrent access is required - at 16287 * worst a fifo underrun happens which also sets this to false. 16288 */ 16289 crtc->cpu_fifo_underrun_disabled = true; 16290 /* 16291 * We track the PCH trancoder underrun reporting state 16292 * within the crtc. With crtc for pipe A housing the underrun 16293 * reporting state for PCH transcoder A, crtc for pipe B housing 16294 * it for PCH transcoder B, etc. LPT-H has only PCH transcoder A, 16295 * and marking underrun reporting as disabled for the non-existing 16296 * PCH transcoders B and C would prevent enabling the south 16297 * error interrupt (see cpt_can_enable_serr_int()). 16298 */ 16299 if (has_pch_trancoder(dev_priv, crtc->pipe)) 16300 crtc->pch_fifo_underrun_disabled = true; 16301 } 16302 } 16303 16304 static bool has_bogus_dpll_config(const struct intel_crtc_state *crtc_state) 16305 { 16306 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev); 16307 16308 /* 16309 * Some SNB BIOSen (eg. ASUS K53SV) are known to misprogram 16310 * the hardware when a high res displays plugged in. DPLL P 16311 * divider is zero, and the pipe timings are bonkers. We'll 16312 * try to disable everything in that case. 16313 * 16314 * FIXME would be nice to be able to sanitize this state 16315 * without several WARNs, but for now let's take the easy 16316 * road. 16317 */ 16318 return IS_GEN(dev_priv, 6) && 16319 crtc_state->base.active && 16320 crtc_state->shared_dpll && 16321 crtc_state->port_clock == 0; 16322 } 16323 16324 static void intel_sanitize_encoder(struct intel_encoder *encoder) 16325 { 16326 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 16327 struct intel_connector *connector; 16328 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 16329 struct intel_crtc_state *crtc_state = crtc ? 16330 to_intel_crtc_state(crtc->base.state) : NULL; 16331 16332 /* We need to check both for a crtc link (meaning that the 16333 * encoder is active and trying to read from a pipe) and the 16334 * pipe itself being active. */ 16335 bool has_active_crtc = crtc_state && 16336 crtc_state->base.active; 16337 16338 if (crtc_state && has_bogus_dpll_config(crtc_state)) { 16339 DRM_DEBUG_KMS("BIOS has misprogrammed the hardware. Disabling pipe %c\n", 16340 pipe_name(crtc->pipe)); 16341 has_active_crtc = false; 16342 } 16343 16344 connector = intel_encoder_find_connector(encoder); 16345 if (connector && !has_active_crtc) { 16346 DRM_DEBUG_KMS("[ENCODER:%d:%s] has active connectors but no active pipe!\n", 16347 encoder->base.base.id, 16348 encoder->base.name); 16349 16350 /* Connector is active, but has no active pipe. This is 16351 * fallout from our resume register restoring. Disable 16352 * the encoder manually again. */ 16353 if (crtc_state) { 16354 struct drm_encoder *best_encoder; 16355 16356 DRM_DEBUG_KMS("[ENCODER:%d:%s] manually disabled\n", 16357 encoder->base.base.id, 16358 encoder->base.name); 16359 16360 /* avoid oopsing in case the hooks consult best_encoder */ 16361 best_encoder = connector->base.state->best_encoder; 16362 connector->base.state->best_encoder = &encoder->base; 16363 16364 if (encoder->disable) 16365 encoder->disable(encoder, crtc_state, 16366 connector->base.state); 16367 if (encoder->post_disable) 16368 encoder->post_disable(encoder, crtc_state, 16369 connector->base.state); 16370 16371 connector->base.state->best_encoder = best_encoder; 16372 } 16373 encoder->base.crtc = NULL; 16374 16375 /* Inconsistent output/port/pipe state happens presumably due to 16376 * a bug in one of the get_hw_state functions. Or someplace else 16377 * in our code, like the register restore mess on resume. Clamp 16378 * things to off as a safer default. */ 16379 16380 connector->base.dpms = DRM_MODE_DPMS_OFF; 16381 connector->base.encoder = NULL; 16382 } 16383 16384 /* notify opregion of the sanitized encoder state */ 16385 intel_opregion_notify_encoder(encoder, connector && has_active_crtc); 16386 16387 if (INTEL_GEN(dev_priv) >= 11) 16388 icl_sanitize_encoder_pll_mapping(encoder); 16389 } 16390 16391 void i915_redisable_vga_power_on(struct drm_i915_private *dev_priv) 16392 { 16393 i915_reg_t vga_reg = i915_vgacntrl_reg(dev_priv); 16394 16395 if (!(I915_READ(vga_reg) & VGA_DISP_DISABLE)) { 16396 DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n"); 16397 i915_disable_vga(dev_priv); 16398 } 16399 } 16400 16401 void i915_redisable_vga(struct drm_i915_private *dev_priv) 16402 { 16403 intel_wakeref_t wakeref; 16404 16405 /* 16406 * This function can be called both from intel_modeset_setup_hw_state or 16407 * at a very early point in our resume sequence, where the power well 16408 * structures are not yet restored. Since this function is at a very 16409 * paranoid "someone might have enabled VGA while we were not looking" 16410 * level, just check if the power well is enabled instead of trying to 16411 * follow the "don't touch the power well if we don't need it" policy 16412 * the rest of the driver uses. 16413 */ 16414 wakeref = intel_display_power_get_if_enabled(dev_priv, 16415 POWER_DOMAIN_VGA); 16416 if (!wakeref) 16417 return; 16418 16419 i915_redisable_vga_power_on(dev_priv); 16420 16421 intel_display_power_put(dev_priv, POWER_DOMAIN_VGA, wakeref); 16422 } 16423 16424 /* FIXME read out full plane state for all planes */ 16425 static void readout_plane_state(struct drm_i915_private *dev_priv) 16426 { 16427 struct intel_plane *plane; 16428 struct intel_crtc *crtc; 16429 16430 for_each_intel_plane(&dev_priv->drm, plane) { 16431 struct intel_plane_state *plane_state = 16432 to_intel_plane_state(plane->base.state); 16433 struct intel_crtc_state *crtc_state; 16434 enum pipe pipe = PIPE_A; 16435 bool visible; 16436 16437 visible = plane->get_hw_state(plane, &pipe); 16438 16439 crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 16440 crtc_state = to_intel_crtc_state(crtc->base.state); 16441 16442 intel_set_plane_visible(crtc_state, plane_state, visible); 16443 16444 DRM_DEBUG_KMS("[PLANE:%d:%s] hw state readout: %s, pipe %c\n", 16445 plane->base.base.id, plane->base.name, 16446 enableddisabled(visible), pipe_name(pipe)); 16447 } 16448 16449 for_each_intel_crtc(&dev_priv->drm, crtc) { 16450 struct intel_crtc_state *crtc_state = 16451 to_intel_crtc_state(crtc->base.state); 16452 16453 fixup_active_planes(crtc_state); 16454 } 16455 } 16456 16457 static void intel_modeset_readout_hw_state(struct drm_device *dev) 16458 { 16459 struct drm_i915_private *dev_priv = to_i915(dev); 16460 enum pipe pipe; 16461 struct intel_crtc *crtc; 16462 struct intel_encoder *encoder; 16463 struct intel_connector *connector; 16464 struct drm_connector_list_iter conn_iter; 16465 int i; 16466 16467 dev_priv->active_crtcs = 0; 16468 16469 for_each_intel_crtc(dev, crtc) { 16470 struct intel_crtc_state *crtc_state = 16471 to_intel_crtc_state(crtc->base.state); 16472 16473 __drm_atomic_helper_crtc_destroy_state(&crtc_state->base); 16474 memset(crtc_state, 0, sizeof(*crtc_state)); 16475 __drm_atomic_helper_crtc_reset(&crtc->base, &crtc_state->base); 16476 16477 crtc_state->base.active = crtc_state->base.enable = 16478 dev_priv->display.get_pipe_config(crtc, crtc_state); 16479 16480 crtc->base.enabled = crtc_state->base.enable; 16481 crtc->active = crtc_state->base.active; 16482 16483 if (crtc_state->base.active) 16484 dev_priv->active_crtcs |= 1 << crtc->pipe; 16485 16486 DRM_DEBUG_KMS("[CRTC:%d:%s] hw state readout: %s\n", 16487 crtc->base.base.id, crtc->base.name, 16488 enableddisabled(crtc_state->base.active)); 16489 } 16490 16491 readout_plane_state(dev_priv); 16492 16493 for (i = 0; i < dev_priv->num_shared_dpll; i++) { 16494 struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i]; 16495 16496 pll->on = pll->info->funcs->get_hw_state(dev_priv, pll, 16497 &pll->state.hw_state); 16498 pll->state.crtc_mask = 0; 16499 for_each_intel_crtc(dev, crtc) { 16500 struct intel_crtc_state *crtc_state = 16501 to_intel_crtc_state(crtc->base.state); 16502 16503 if (crtc_state->base.active && 16504 crtc_state->shared_dpll == pll) 16505 pll->state.crtc_mask |= 1 << crtc->pipe; 16506 } 16507 pll->active_mask = pll->state.crtc_mask; 16508 16509 DRM_DEBUG_KMS("%s hw state readout: crtc_mask 0x%08x, on %i\n", 16510 pll->info->name, pll->state.crtc_mask, pll->on); 16511 } 16512 16513 for_each_intel_encoder(dev, encoder) { 16514 pipe = 0; 16515 16516 if (encoder->get_hw_state(encoder, &pipe)) { 16517 struct intel_crtc_state *crtc_state; 16518 16519 crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 16520 crtc_state = to_intel_crtc_state(crtc->base.state); 16521 16522 encoder->base.crtc = &crtc->base; 16523 encoder->get_config(encoder, crtc_state); 16524 } else { 16525 encoder->base.crtc = NULL; 16526 } 16527 16528 DRM_DEBUG_KMS("[ENCODER:%d:%s] hw state readout: %s, pipe %c\n", 16529 encoder->base.base.id, encoder->base.name, 16530 enableddisabled(encoder->base.crtc), 16531 pipe_name(pipe)); 16532 } 16533 16534 drm_connector_list_iter_begin(dev, &conn_iter); 16535 for_each_intel_connector_iter(connector, &conn_iter) { 16536 if (connector->get_hw_state(connector)) { 16537 connector->base.dpms = DRM_MODE_DPMS_ON; 16538 16539 encoder = connector->encoder; 16540 connector->base.encoder = &encoder->base; 16541 16542 if (encoder->base.crtc && 16543 encoder->base.crtc->state->active) { 16544 /* 16545 * This has to be done during hardware readout 16546 * because anything calling .crtc_disable may 16547 * rely on the connector_mask being accurate. 16548 */ 16549 encoder->base.crtc->state->connector_mask |= 16550 drm_connector_mask(&connector->base); 16551 encoder->base.crtc->state->encoder_mask |= 16552 drm_encoder_mask(&encoder->base); 16553 } 16554 16555 } else { 16556 connector->base.dpms = DRM_MODE_DPMS_OFF; 16557 connector->base.encoder = NULL; 16558 } 16559 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] hw state readout: %s\n", 16560 connector->base.base.id, connector->base.name, 16561 enableddisabled(connector->base.encoder)); 16562 } 16563 drm_connector_list_iter_end(&conn_iter); 16564 16565 for_each_intel_crtc(dev, crtc) { 16566 struct intel_bw_state *bw_state = 16567 to_intel_bw_state(dev_priv->bw_obj.state); 16568 struct intel_crtc_state *crtc_state = 16569 to_intel_crtc_state(crtc->base.state); 16570 struct intel_plane *plane; 16571 int min_cdclk = 0; 16572 16573 memset(&crtc->base.mode, 0, sizeof(crtc->base.mode)); 16574 if (crtc_state->base.active) { 16575 intel_mode_from_pipe_config(&crtc->base.mode, crtc_state); 16576 crtc->base.mode.hdisplay = crtc_state->pipe_src_w; 16577 crtc->base.mode.vdisplay = crtc_state->pipe_src_h; 16578 intel_mode_from_pipe_config(&crtc_state->base.adjusted_mode, crtc_state); 16579 WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, &crtc->base.mode)); 16580 16581 /* 16582 * The initial mode needs to be set in order to keep 16583 * the atomic core happy. It wants a valid mode if the 16584 * crtc's enabled, so we do the above call. 16585 * 16586 * But we don't set all the derived state fully, hence 16587 * set a flag to indicate that a full recalculation is 16588 * needed on the next commit. 16589 */ 16590 crtc_state->base.mode.private_flags = I915_MODE_FLAG_INHERITED; 16591 16592 intel_crtc_compute_pixel_rate(crtc_state); 16593 16594 if (dev_priv->display.modeset_calc_cdclk) { 16595 min_cdclk = intel_crtc_compute_min_cdclk(crtc_state); 16596 if (WARN_ON(min_cdclk < 0)) 16597 min_cdclk = 0; 16598 } 16599 16600 drm_calc_timestamping_constants(&crtc->base, 16601 &crtc_state->base.adjusted_mode); 16602 update_scanline_offset(crtc_state); 16603 } 16604 16605 dev_priv->min_cdclk[crtc->pipe] = min_cdclk; 16606 dev_priv->min_voltage_level[crtc->pipe] = 16607 crtc_state->min_voltage_level; 16608 16609 for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) { 16610 const struct intel_plane_state *plane_state = 16611 to_intel_plane_state(plane->base.state); 16612 16613 /* 16614 * FIXME don't have the fb yet, so can't 16615 * use intel_plane_data_rate() :( 16616 */ 16617 if (plane_state->base.visible) 16618 crtc_state->data_rate[plane->id] = 16619 4 * crtc_state->pixel_rate; 16620 } 16621 16622 intel_bw_crtc_update(bw_state, crtc_state); 16623 16624 intel_pipe_config_sanity_check(dev_priv, crtc_state); 16625 } 16626 } 16627 16628 static void 16629 get_encoder_power_domains(struct drm_i915_private *dev_priv) 16630 { 16631 struct intel_encoder *encoder; 16632 16633 for_each_intel_encoder(&dev_priv->drm, encoder) { 16634 struct intel_crtc_state *crtc_state; 16635 16636 if (!encoder->get_power_domains) 16637 continue; 16638 16639 /* 16640 * MST-primary and inactive encoders don't have a crtc state 16641 * and neither of these require any power domain references. 16642 */ 16643 if (!encoder->base.crtc) 16644 continue; 16645 16646 crtc_state = to_intel_crtc_state(encoder->base.crtc->state); 16647 encoder->get_power_domains(encoder, crtc_state); 16648 } 16649 } 16650 16651 static void intel_early_display_was(struct drm_i915_private *dev_priv) 16652 { 16653 /* Display WA #1185 WaDisableDARBFClkGating:cnl,glk */ 16654 if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv)) 16655 I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) | 16656 DARBF_GATING_DIS); 16657 16658 if (IS_HASWELL(dev_priv)) { 16659 /* 16660 * WaRsPkgCStateDisplayPMReq:hsw 16661 * System hang if this isn't done before disabling all planes! 16662 */ 16663 I915_WRITE(CHICKEN_PAR1_1, 16664 I915_READ(CHICKEN_PAR1_1) | FORCE_ARB_IDLE_PLANES); 16665 } 16666 } 16667 16668 static void ibx_sanitize_pch_hdmi_port(struct drm_i915_private *dev_priv, 16669 enum port port, i915_reg_t hdmi_reg) 16670 { 16671 u32 val = I915_READ(hdmi_reg); 16672 16673 if (val & SDVO_ENABLE || 16674 (val & SDVO_PIPE_SEL_MASK) == SDVO_PIPE_SEL(PIPE_A)) 16675 return; 16676 16677 DRM_DEBUG_KMS("Sanitizing transcoder select for HDMI %c\n", 16678 port_name(port)); 16679 16680 val &= ~SDVO_PIPE_SEL_MASK; 16681 val |= SDVO_PIPE_SEL(PIPE_A); 16682 16683 I915_WRITE(hdmi_reg, val); 16684 } 16685 16686 static void ibx_sanitize_pch_dp_port(struct drm_i915_private *dev_priv, 16687 enum port port, i915_reg_t dp_reg) 16688 { 16689 u32 val = I915_READ(dp_reg); 16690 16691 if (val & DP_PORT_EN || 16692 (val & DP_PIPE_SEL_MASK) == DP_PIPE_SEL(PIPE_A)) 16693 return; 16694 16695 DRM_DEBUG_KMS("Sanitizing transcoder select for DP %c\n", 16696 port_name(port)); 16697 16698 val &= ~DP_PIPE_SEL_MASK; 16699 val |= DP_PIPE_SEL(PIPE_A); 16700 16701 I915_WRITE(dp_reg, val); 16702 } 16703 16704 static void ibx_sanitize_pch_ports(struct drm_i915_private *dev_priv) 16705 { 16706 /* 16707 * The BIOS may select transcoder B on some of the PCH 16708 * ports even it doesn't enable the port. This would trip 16709 * assert_pch_dp_disabled() and assert_pch_hdmi_disabled(). 16710 * Sanitize the transcoder select bits to prevent that. We 16711 * assume that the BIOS never actually enabled the port, 16712 * because if it did we'd actually have to toggle the port 16713 * on and back off to make the transcoder A select stick 16714 * (see. intel_dp_link_down(), intel_disable_hdmi(), 16715 * intel_disable_sdvo()). 16716 */ 16717 ibx_sanitize_pch_dp_port(dev_priv, PORT_B, PCH_DP_B); 16718 ibx_sanitize_pch_dp_port(dev_priv, PORT_C, PCH_DP_C); 16719 ibx_sanitize_pch_dp_port(dev_priv, PORT_D, PCH_DP_D); 16720 16721 /* PCH SDVOB multiplex with HDMIB */ 16722 ibx_sanitize_pch_hdmi_port(dev_priv, PORT_B, PCH_HDMIB); 16723 ibx_sanitize_pch_hdmi_port(dev_priv, PORT_C, PCH_HDMIC); 16724 ibx_sanitize_pch_hdmi_port(dev_priv, PORT_D, PCH_HDMID); 16725 } 16726 16727 /* Scan out the current hw modeset state, 16728 * and sanitizes it to the current state 16729 */ 16730 static void 16731 intel_modeset_setup_hw_state(struct drm_device *dev, 16732 struct drm_modeset_acquire_ctx *ctx) 16733 { 16734 struct drm_i915_private *dev_priv = to_i915(dev); 16735 struct intel_crtc_state *crtc_state; 16736 struct intel_encoder *encoder; 16737 struct intel_crtc *crtc; 16738 intel_wakeref_t wakeref; 16739 int i; 16740 16741 wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT); 16742 16743 intel_early_display_was(dev_priv); 16744 intel_modeset_readout_hw_state(dev); 16745 16746 /* HW state is read out, now we need to sanitize this mess. */ 16747 get_encoder_power_domains(dev_priv); 16748 16749 if (HAS_PCH_IBX(dev_priv)) 16750 ibx_sanitize_pch_ports(dev_priv); 16751 16752 /* 16753 * intel_sanitize_plane_mapping() may need to do vblank 16754 * waits, so we need vblank interrupts restored beforehand. 16755 */ 16756 for_each_intel_crtc(&dev_priv->drm, crtc) { 16757 crtc_state = to_intel_crtc_state(crtc->base.state); 16758 16759 drm_crtc_vblank_reset(&crtc->base); 16760 16761 if (crtc_state->base.active) 16762 intel_crtc_vblank_on(crtc_state); 16763 } 16764 16765 intel_sanitize_plane_mapping(dev_priv); 16766 16767 for_each_intel_encoder(dev, encoder) 16768 intel_sanitize_encoder(encoder); 16769 16770 for_each_intel_crtc(&dev_priv->drm, crtc) { 16771 crtc_state = to_intel_crtc_state(crtc->base.state); 16772 intel_sanitize_crtc(crtc, ctx); 16773 intel_dump_pipe_config(crtc_state, NULL, "[setup_hw_state]"); 16774 } 16775 16776 intel_modeset_update_connector_atomic_state(dev); 16777 16778 for (i = 0; i < dev_priv->num_shared_dpll; i++) { 16779 struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i]; 16780 16781 if (!pll->on || pll->active_mask) 16782 continue; 16783 16784 DRM_DEBUG_KMS("%s enabled but not in use, disabling\n", 16785 pll->info->name); 16786 16787 pll->info->funcs->disable(dev_priv, pll); 16788 pll->on = false; 16789 } 16790 16791 if (IS_G4X(dev_priv)) { 16792 g4x_wm_get_hw_state(dev_priv); 16793 g4x_wm_sanitize(dev_priv); 16794 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 16795 vlv_wm_get_hw_state(dev_priv); 16796 vlv_wm_sanitize(dev_priv); 16797 } else if (INTEL_GEN(dev_priv) >= 9) { 16798 skl_wm_get_hw_state(dev_priv); 16799 } else if (HAS_PCH_SPLIT(dev_priv)) { 16800 ilk_wm_get_hw_state(dev_priv); 16801 } 16802 16803 for_each_intel_crtc(dev, crtc) { 16804 u64 put_domains; 16805 16806 crtc_state = to_intel_crtc_state(crtc->base.state); 16807 put_domains = modeset_get_crtc_power_domains(&crtc->base, crtc_state); 16808 if (WARN_ON(put_domains)) 16809 modeset_put_power_domains(dev_priv, put_domains); 16810 } 16811 16812 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref); 16813 16814 intel_fbc_init_pipe_state(dev_priv); 16815 } 16816 16817 void intel_display_resume(struct drm_device *dev) 16818 { 16819 struct drm_i915_private *dev_priv = to_i915(dev); 16820 struct drm_atomic_state *state = dev_priv->modeset_restore_state; 16821 struct drm_modeset_acquire_ctx ctx; 16822 int ret; 16823 16824 dev_priv->modeset_restore_state = NULL; 16825 if (state) 16826 state->acquire_ctx = &ctx; 16827 16828 drm_modeset_acquire_init(&ctx, 0); 16829 16830 while (1) { 16831 ret = drm_modeset_lock_all_ctx(dev, &ctx); 16832 if (ret != -EDEADLK) 16833 break; 16834 16835 drm_modeset_backoff(&ctx); 16836 } 16837 16838 if (!ret) 16839 ret = __intel_display_resume(dev, state, &ctx); 16840 16841 intel_enable_ipc(dev_priv); 16842 drm_modeset_drop_locks(&ctx); 16843 drm_modeset_acquire_fini(&ctx); 16844 16845 if (ret) 16846 DRM_ERROR("Restoring old state failed with %i\n", ret); 16847 if (state) 16848 drm_atomic_state_put(state); 16849 } 16850 16851 static void intel_hpd_poll_fini(struct drm_device *dev) 16852 { 16853 struct intel_connector *connector; 16854 struct drm_connector_list_iter conn_iter; 16855 16856 /* Kill all the work that may have been queued by hpd. */ 16857 drm_connector_list_iter_begin(dev, &conn_iter); 16858 for_each_intel_connector_iter(connector, &conn_iter) { 16859 if (connector->modeset_retry_work.func) 16860 cancel_work_sync(&connector->modeset_retry_work); 16861 if (connector->hdcp.shim) { 16862 cancel_delayed_work_sync(&connector->hdcp.check_work); 16863 cancel_work_sync(&connector->hdcp.prop_work); 16864 } 16865 } 16866 drm_connector_list_iter_end(&conn_iter); 16867 } 16868 16869 void intel_modeset_cleanup(struct drm_device *dev) 16870 { 16871 struct drm_i915_private *dev_priv = to_i915(dev); 16872 16873 flush_workqueue(dev_priv->modeset_wq); 16874 16875 flush_work(&dev_priv->atomic_helper.free_work); 16876 WARN_ON(!llist_empty(&dev_priv->atomic_helper.free_list)); 16877 16878 /* 16879 * Interrupts and polling as the first thing to avoid creating havoc. 16880 * Too much stuff here (turning of connectors, ...) would 16881 * experience fancy races otherwise. 16882 */ 16883 intel_irq_uninstall(dev_priv); 16884 16885 /* 16886 * Due to the hpd irq storm handling the hotplug work can re-arm the 16887 * poll handlers. Hence disable polling after hpd handling is shut down. 16888 */ 16889 intel_hpd_poll_fini(dev); 16890 16891 /* poll work can call into fbdev, hence clean that up afterwards */ 16892 intel_fbdev_fini(dev_priv); 16893 16894 intel_unregister_dsm_handler(); 16895 16896 intel_fbc_global_disable(dev_priv); 16897 16898 /* flush any delayed tasks or pending work */ 16899 flush_scheduled_work(); 16900 16901 intel_hdcp_component_fini(dev_priv); 16902 16903 drm_mode_config_cleanup(dev); 16904 16905 intel_overlay_cleanup(dev_priv); 16906 16907 intel_gmbus_teardown(dev_priv); 16908 16909 destroy_workqueue(dev_priv->modeset_wq); 16910 16911 intel_fbc_cleanup_cfb(dev_priv); 16912 } 16913 16914 /* 16915 * set vga decode state - true == enable VGA decode 16916 */ 16917 int intel_modeset_vga_set_state(struct drm_i915_private *dev_priv, bool state) 16918 { 16919 unsigned reg = INTEL_GEN(dev_priv) >= 6 ? SNB_GMCH_CTRL : INTEL_GMCH_CTRL; 16920 u16 gmch_ctrl; 16921 16922 if (pci_read_config_word(dev_priv->bridge_dev, reg, &gmch_ctrl)) { 16923 DRM_ERROR("failed to read control word\n"); 16924 return -EIO; 16925 } 16926 16927 if (!!(gmch_ctrl & INTEL_GMCH_VGA_DISABLE) == !state) 16928 return 0; 16929 16930 if (state) 16931 gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE; 16932 else 16933 gmch_ctrl |= INTEL_GMCH_VGA_DISABLE; 16934 16935 if (pci_write_config_word(dev_priv->bridge_dev, reg, gmch_ctrl)) { 16936 DRM_ERROR("failed to write control word\n"); 16937 return -EIO; 16938 } 16939 16940 return 0; 16941 } 16942 16943 #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) 16944 16945 struct intel_display_error_state { 16946 16947 u32 power_well_driver; 16948 16949 struct intel_cursor_error_state { 16950 u32 control; 16951 u32 position; 16952 u32 base; 16953 u32 size; 16954 } cursor[I915_MAX_PIPES]; 16955 16956 struct intel_pipe_error_state { 16957 bool power_domain_on; 16958 u32 source; 16959 u32 stat; 16960 } pipe[I915_MAX_PIPES]; 16961 16962 struct intel_plane_error_state { 16963 u32 control; 16964 u32 stride; 16965 u32 size; 16966 u32 pos; 16967 u32 addr; 16968 u32 surface; 16969 u32 tile_offset; 16970 } plane[I915_MAX_PIPES]; 16971 16972 struct intel_transcoder_error_state { 16973 bool available; 16974 bool power_domain_on; 16975 enum transcoder cpu_transcoder; 16976 16977 u32 conf; 16978 16979 u32 htotal; 16980 u32 hblank; 16981 u32 hsync; 16982 u32 vtotal; 16983 u32 vblank; 16984 u32 vsync; 16985 } transcoder[4]; 16986 }; 16987 16988 struct intel_display_error_state * 16989 intel_display_capture_error_state(struct drm_i915_private *dev_priv) 16990 { 16991 struct intel_display_error_state *error; 16992 int transcoders[] = { 16993 TRANSCODER_A, 16994 TRANSCODER_B, 16995 TRANSCODER_C, 16996 TRANSCODER_EDP, 16997 }; 16998 int i; 16999 17000 BUILD_BUG_ON(ARRAY_SIZE(transcoders) != ARRAY_SIZE(error->transcoder)); 17001 17002 if (!HAS_DISPLAY(dev_priv)) 17003 return NULL; 17004 17005 error = kzalloc(sizeof(*error), GFP_ATOMIC); 17006 if (error == NULL) 17007 return NULL; 17008 17009 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) 17010 error->power_well_driver = I915_READ(HSW_PWR_WELL_CTL2); 17011 17012 for_each_pipe(dev_priv, i) { 17013 error->pipe[i].power_domain_on = 17014 __intel_display_power_is_enabled(dev_priv, 17015 POWER_DOMAIN_PIPE(i)); 17016 if (!error->pipe[i].power_domain_on) 17017 continue; 17018 17019 error->cursor[i].control = I915_READ(CURCNTR(i)); 17020 error->cursor[i].position = I915_READ(CURPOS(i)); 17021 error->cursor[i].base = I915_READ(CURBASE(i)); 17022 17023 error->plane[i].control = I915_READ(DSPCNTR(i)); 17024 error->plane[i].stride = I915_READ(DSPSTRIDE(i)); 17025 if (INTEL_GEN(dev_priv) <= 3) { 17026 error->plane[i].size = I915_READ(DSPSIZE(i)); 17027 error->plane[i].pos = I915_READ(DSPPOS(i)); 17028 } 17029 if (INTEL_GEN(dev_priv) <= 7 && !IS_HASWELL(dev_priv)) 17030 error->plane[i].addr = I915_READ(DSPADDR(i)); 17031 if (INTEL_GEN(dev_priv) >= 4) { 17032 error->plane[i].surface = I915_READ(DSPSURF(i)); 17033 error->plane[i].tile_offset = I915_READ(DSPTILEOFF(i)); 17034 } 17035 17036 error->pipe[i].source = I915_READ(PIPESRC(i)); 17037 17038 if (HAS_GMCH(dev_priv)) 17039 error->pipe[i].stat = I915_READ(PIPESTAT(i)); 17040 } 17041 17042 for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) { 17043 enum transcoder cpu_transcoder = transcoders[i]; 17044 17045 if (!INTEL_INFO(dev_priv)->trans_offsets[cpu_transcoder]) 17046 continue; 17047 17048 error->transcoder[i].available = true; 17049 error->transcoder[i].power_domain_on = 17050 __intel_display_power_is_enabled(dev_priv, 17051 POWER_DOMAIN_TRANSCODER(cpu_transcoder)); 17052 if (!error->transcoder[i].power_domain_on) 17053 continue; 17054 17055 error->transcoder[i].cpu_transcoder = cpu_transcoder; 17056 17057 error->transcoder[i].conf = I915_READ(PIPECONF(cpu_transcoder)); 17058 error->transcoder[i].htotal = I915_READ(HTOTAL(cpu_transcoder)); 17059 error->transcoder[i].hblank = I915_READ(HBLANK(cpu_transcoder)); 17060 error->transcoder[i].hsync = I915_READ(HSYNC(cpu_transcoder)); 17061 error->transcoder[i].vtotal = I915_READ(VTOTAL(cpu_transcoder)); 17062 error->transcoder[i].vblank = I915_READ(VBLANK(cpu_transcoder)); 17063 error->transcoder[i].vsync = I915_READ(VSYNC(cpu_transcoder)); 17064 } 17065 17066 return error; 17067 } 17068 17069 #define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__) 17070 17071 void 17072 intel_display_print_error_state(struct drm_i915_error_state_buf *m, 17073 struct intel_display_error_state *error) 17074 { 17075 struct drm_i915_private *dev_priv = m->i915; 17076 int i; 17077 17078 if (!error) 17079 return; 17080 17081 err_printf(m, "Num Pipes: %d\n", INTEL_INFO(dev_priv)->num_pipes); 17082 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) 17083 err_printf(m, "PWR_WELL_CTL2: %08x\n", 17084 error->power_well_driver); 17085 for_each_pipe(dev_priv, i) { 17086 err_printf(m, "Pipe [%d]:\n", i); 17087 err_printf(m, " Power: %s\n", 17088 onoff(error->pipe[i].power_domain_on)); 17089 err_printf(m, " SRC: %08x\n", error->pipe[i].source); 17090 err_printf(m, " STAT: %08x\n", error->pipe[i].stat); 17091 17092 err_printf(m, "Plane [%d]:\n", i); 17093 err_printf(m, " CNTR: %08x\n", error->plane[i].control); 17094 err_printf(m, " STRIDE: %08x\n", error->plane[i].stride); 17095 if (INTEL_GEN(dev_priv) <= 3) { 17096 err_printf(m, " SIZE: %08x\n", error->plane[i].size); 17097 err_printf(m, " POS: %08x\n", error->plane[i].pos); 17098 } 17099 if (INTEL_GEN(dev_priv) <= 7 && !IS_HASWELL(dev_priv)) 17100 err_printf(m, " ADDR: %08x\n", error->plane[i].addr); 17101 if (INTEL_GEN(dev_priv) >= 4) { 17102 err_printf(m, " SURF: %08x\n", error->plane[i].surface); 17103 err_printf(m, " TILEOFF: %08x\n", error->plane[i].tile_offset); 17104 } 17105 17106 err_printf(m, "Cursor [%d]:\n", i); 17107 err_printf(m, " CNTR: %08x\n", error->cursor[i].control); 17108 err_printf(m, " POS: %08x\n", error->cursor[i].position); 17109 err_printf(m, " BASE: %08x\n", error->cursor[i].base); 17110 } 17111 17112 for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) { 17113 if (!error->transcoder[i].available) 17114 continue; 17115 17116 err_printf(m, "CPU transcoder: %s\n", 17117 transcoder_name(error->transcoder[i].cpu_transcoder)); 17118 err_printf(m, " Power: %s\n", 17119 onoff(error->transcoder[i].power_domain_on)); 17120 err_printf(m, " CONF: %08x\n", error->transcoder[i].conf); 17121 err_printf(m, " HTOTAL: %08x\n", error->transcoder[i].htotal); 17122 err_printf(m, " HBLANK: %08x\n", error->transcoder[i].hblank); 17123 err_printf(m, " HSYNC: %08x\n", error->transcoder[i].hsync); 17124 err_printf(m, " VTOTAL: %08x\n", error->transcoder[i].vtotal); 17125 err_printf(m, " VBLANK: %08x\n", error->transcoder[i].vblank); 17126 err_printf(m, " VSYNC: %08x\n", error->transcoder[i].vsync); 17127 } 17128 } 17129 17130 #endif 17131