1 /* $NetBSD: intel_hdmi.c,v 1.5 2021/12/19 11:46:19 riastradh Exp $ */ 2 3 /* 4 * Copyright 2006 Dave Airlie <airlied (at) linux.ie> 5 * Copyright 2006-2009 Intel Corporation 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the next 15 * paragraph) shall be included in all copies or substantial portions of the 16 * Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24 * DEALINGS IN THE SOFTWARE. 25 * 26 * Authors: 27 * Eric Anholt <eric (at) anholt.net> 28 * Jesse Barnes <jesse.barnes (at) intel.com> 29 */ 30 31 #include <sys/cdefs.h> 32 __KERNEL_RCSID(0, "$NetBSD: intel_hdmi.c,v 1.5 2021/12/19 11:46:19 riastradh Exp $"); 33 34 #include <linux/delay.h> 35 #include <linux/hdmi.h> 36 #include <linux/i2c.h> 37 #include <linux/slab.h> 38 39 #include <drm/drm_atomic_helper.h> 40 #include <drm/drm_crtc.h> 41 #include <drm/drm_edid.h> 42 #include <drm/drm_hdcp.h> 43 #include <drm/drm_scdc_helper.h> 44 #include <drm/i915_drm.h> 45 #include <drm/intel_lpe_audio.h> 46 47 #include "i915_debugfs.h" 48 #include "i915_drv.h" 49 #include "intel_atomic.h" 50 #include "intel_audio.h" 51 #include "intel_connector.h" 52 #include "intel_ddi.h" 53 #include "intel_display_types.h" 54 #include "intel_dp.h" 55 #include "intel_dpio_phy.h" 56 #include "intel_fifo_underrun.h" 57 #include "intel_gmbus.h" 58 #include "intel_hdcp.h" 59 #include "intel_hdmi.h" 60 #include "intel_hotplug.h" 61 #include "intel_lspcon.h" 62 #include "intel_panel.h" 63 #include "intel_sdvo.h" 64 #include "intel_sideband.h" 65 66 static struct drm_device *intel_hdmi_to_dev(struct intel_hdmi *intel_hdmi) 67 { 68 return hdmi_to_dig_port(intel_hdmi)->base.base.dev; 69 } 70 71 static void 72 assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi) 73 { 74 struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi); 75 struct drm_i915_private *dev_priv = to_i915(dev); 76 u32 enabled_bits; 77 78 enabled_bits = HAS_DDI(dev_priv) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE; 79 80 WARN(I915_READ(intel_hdmi->hdmi_reg) & enabled_bits, 81 "HDMI port enabled, expecting disabled\n"); 82 } 83 84 static void 85 assert_hdmi_transcoder_func_disabled(struct drm_i915_private *dev_priv, 86 enum transcoder cpu_transcoder) 87 { 88 WARN(I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)) & 89 TRANS_DDI_FUNC_ENABLE, 90 "HDMI transcoder function enabled, expecting disabled\n"); 91 } 92 93 struct intel_hdmi *enc_to_intel_hdmi(struct intel_encoder *encoder) 94 { 95 struct intel_digital_port *intel_dig_port = 96 container_of(&encoder->base, struct intel_digital_port, 97 base.base); 98 return &intel_dig_port->hdmi; 99 } 100 101 static struct intel_hdmi *intel_attached_hdmi(struct intel_connector *connector) 102 { 103 return enc_to_intel_hdmi(intel_attached_encoder(connector)); 104 } 105 106 static u32 g4x_infoframe_index(unsigned int type) 107 { 108 switch (type) { 109 case HDMI_PACKET_TYPE_GAMUT_METADATA: 110 return VIDEO_DIP_SELECT_GAMUT; 111 case HDMI_INFOFRAME_TYPE_AVI: 112 return VIDEO_DIP_SELECT_AVI; 113 case HDMI_INFOFRAME_TYPE_SPD: 114 return VIDEO_DIP_SELECT_SPD; 115 case HDMI_INFOFRAME_TYPE_VENDOR: 116 return VIDEO_DIP_SELECT_VENDOR; 117 default: 118 MISSING_CASE(type); 119 return 0; 120 } 121 } 122 123 static u32 g4x_infoframe_enable(unsigned int type) 124 { 125 switch (type) { 126 case HDMI_PACKET_TYPE_GENERAL_CONTROL: 127 return VIDEO_DIP_ENABLE_GCP; 128 case HDMI_PACKET_TYPE_GAMUT_METADATA: 129 return VIDEO_DIP_ENABLE_GAMUT; 130 case DP_SDP_VSC: 131 return 0; 132 case HDMI_INFOFRAME_TYPE_AVI: 133 return VIDEO_DIP_ENABLE_AVI; 134 case HDMI_INFOFRAME_TYPE_SPD: 135 return VIDEO_DIP_ENABLE_SPD; 136 case HDMI_INFOFRAME_TYPE_VENDOR: 137 return VIDEO_DIP_ENABLE_VENDOR; 138 case HDMI_INFOFRAME_TYPE_DRM: 139 return 0; 140 default: 141 MISSING_CASE(type); 142 return 0; 143 } 144 } 145 146 static u32 hsw_infoframe_enable(unsigned int type) 147 { 148 switch (type) { 149 case HDMI_PACKET_TYPE_GENERAL_CONTROL: 150 return VIDEO_DIP_ENABLE_GCP_HSW; 151 case HDMI_PACKET_TYPE_GAMUT_METADATA: 152 return VIDEO_DIP_ENABLE_GMP_HSW; 153 case DP_SDP_VSC: 154 return VIDEO_DIP_ENABLE_VSC_HSW; 155 case DP_SDP_PPS: 156 return VDIP_ENABLE_PPS; 157 case HDMI_INFOFRAME_TYPE_AVI: 158 return VIDEO_DIP_ENABLE_AVI_HSW; 159 case HDMI_INFOFRAME_TYPE_SPD: 160 return VIDEO_DIP_ENABLE_SPD_HSW; 161 case HDMI_INFOFRAME_TYPE_VENDOR: 162 return VIDEO_DIP_ENABLE_VS_HSW; 163 case HDMI_INFOFRAME_TYPE_DRM: 164 return VIDEO_DIP_ENABLE_DRM_GLK; 165 default: 166 MISSING_CASE(type); 167 return 0; 168 } 169 } 170 171 static i915_reg_t 172 hsw_dip_data_reg(struct drm_i915_private *dev_priv, 173 enum transcoder cpu_transcoder, 174 unsigned int type, 175 int i) 176 { 177 switch (type) { 178 case HDMI_PACKET_TYPE_GAMUT_METADATA: 179 return HSW_TVIDEO_DIP_GMP_DATA(cpu_transcoder, i); 180 case DP_SDP_VSC: 181 return HSW_TVIDEO_DIP_VSC_DATA(cpu_transcoder, i); 182 case DP_SDP_PPS: 183 return ICL_VIDEO_DIP_PPS_DATA(cpu_transcoder, i); 184 case HDMI_INFOFRAME_TYPE_AVI: 185 return HSW_TVIDEO_DIP_AVI_DATA(cpu_transcoder, i); 186 case HDMI_INFOFRAME_TYPE_SPD: 187 return HSW_TVIDEO_DIP_SPD_DATA(cpu_transcoder, i); 188 case HDMI_INFOFRAME_TYPE_VENDOR: 189 return HSW_TVIDEO_DIP_VS_DATA(cpu_transcoder, i); 190 case HDMI_INFOFRAME_TYPE_DRM: 191 return GLK_TVIDEO_DIP_DRM_DATA(cpu_transcoder, i); 192 default: 193 MISSING_CASE(type); 194 return INVALID_MMIO_REG; 195 } 196 } 197 198 static int hsw_dip_data_size(struct drm_i915_private *dev_priv, 199 unsigned int type) 200 { 201 switch (type) { 202 case DP_SDP_VSC: 203 return VIDEO_DIP_VSC_DATA_SIZE; 204 case DP_SDP_PPS: 205 return VIDEO_DIP_PPS_DATA_SIZE; 206 case HDMI_PACKET_TYPE_GAMUT_METADATA: 207 if (INTEL_GEN(dev_priv) >= 11) 208 return VIDEO_DIP_GMP_DATA_SIZE; 209 else 210 return VIDEO_DIP_DATA_SIZE; 211 default: 212 return VIDEO_DIP_DATA_SIZE; 213 } 214 } 215 216 static void g4x_write_infoframe(struct intel_encoder *encoder, 217 const struct intel_crtc_state *crtc_state, 218 unsigned int type, 219 const void *frame, ssize_t len) 220 { 221 const u32 *data = frame; 222 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 223 u32 val = I915_READ(VIDEO_DIP_CTL); 224 int i; 225 226 WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n"); 227 228 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 229 val |= g4x_infoframe_index(type); 230 231 val &= ~g4x_infoframe_enable(type); 232 233 I915_WRITE(VIDEO_DIP_CTL, val); 234 235 for (i = 0; i < len; i += 4) { 236 I915_WRITE(VIDEO_DIP_DATA, *data); 237 data++; 238 } 239 /* Write every possible data byte to force correct ECC calculation. */ 240 for (; i < VIDEO_DIP_DATA_SIZE; i += 4) 241 I915_WRITE(VIDEO_DIP_DATA, 0); 242 243 val |= g4x_infoframe_enable(type); 244 val &= ~VIDEO_DIP_FREQ_MASK; 245 val |= VIDEO_DIP_FREQ_VSYNC; 246 247 I915_WRITE(VIDEO_DIP_CTL, val); 248 POSTING_READ(VIDEO_DIP_CTL); 249 } 250 251 static void g4x_read_infoframe(struct intel_encoder *encoder, 252 const struct intel_crtc_state *crtc_state, 253 unsigned int type, 254 void *frame, ssize_t len) 255 { 256 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 257 u32 val, *data = frame; 258 int i; 259 260 val = I915_READ(VIDEO_DIP_CTL); 261 262 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 263 val |= g4x_infoframe_index(type); 264 265 I915_WRITE(VIDEO_DIP_CTL, val); 266 267 for (i = 0; i < len; i += 4) 268 *data++ = I915_READ(VIDEO_DIP_DATA); 269 } 270 271 static u32 g4x_infoframes_enabled(struct intel_encoder *encoder, 272 const struct intel_crtc_state *pipe_config) 273 { 274 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 275 u32 val = I915_READ(VIDEO_DIP_CTL); 276 277 if ((val & VIDEO_DIP_ENABLE) == 0) 278 return 0; 279 280 if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(encoder->port)) 281 return 0; 282 283 return val & (VIDEO_DIP_ENABLE_AVI | 284 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_SPD); 285 } 286 287 static void ibx_write_infoframe(struct intel_encoder *encoder, 288 const struct intel_crtc_state *crtc_state, 289 unsigned int type, 290 const void *frame, ssize_t len) 291 { 292 const u32 *data = frame; 293 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 294 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 295 i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe); 296 u32 val = I915_READ(reg); 297 int i; 298 299 WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n"); 300 301 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 302 val |= g4x_infoframe_index(type); 303 304 val &= ~g4x_infoframe_enable(type); 305 306 I915_WRITE(reg, val); 307 308 for (i = 0; i < len; i += 4) { 309 I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data); 310 data++; 311 } 312 /* Write every possible data byte to force correct ECC calculation. */ 313 for (; i < VIDEO_DIP_DATA_SIZE; i += 4) 314 I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), 0); 315 316 val |= g4x_infoframe_enable(type); 317 val &= ~VIDEO_DIP_FREQ_MASK; 318 val |= VIDEO_DIP_FREQ_VSYNC; 319 320 I915_WRITE(reg, val); 321 POSTING_READ(reg); 322 } 323 324 static void ibx_read_infoframe(struct intel_encoder *encoder, 325 const struct intel_crtc_state *crtc_state, 326 unsigned int type, 327 void *frame, ssize_t len) 328 { 329 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 330 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 331 u32 val, *data = frame; 332 int i; 333 334 val = I915_READ(TVIDEO_DIP_CTL(crtc->pipe)); 335 336 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 337 val |= g4x_infoframe_index(type); 338 339 I915_WRITE(TVIDEO_DIP_CTL(crtc->pipe), val); 340 341 for (i = 0; i < len; i += 4) 342 *data++ = I915_READ(TVIDEO_DIP_DATA(crtc->pipe)); 343 } 344 345 static u32 ibx_infoframes_enabled(struct intel_encoder *encoder, 346 const struct intel_crtc_state *pipe_config) 347 { 348 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 349 enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe; 350 i915_reg_t reg = TVIDEO_DIP_CTL(pipe); 351 u32 val = I915_READ(reg); 352 353 if ((val & VIDEO_DIP_ENABLE) == 0) 354 return 0; 355 356 if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(encoder->port)) 357 return 0; 358 359 return val & (VIDEO_DIP_ENABLE_AVI | 360 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 361 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 362 } 363 364 static void cpt_write_infoframe(struct intel_encoder *encoder, 365 const struct intel_crtc_state *crtc_state, 366 unsigned int type, 367 const void *frame, ssize_t len) 368 { 369 const u32 *data = frame; 370 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 371 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 372 i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe); 373 u32 val = I915_READ(reg); 374 int i; 375 376 WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n"); 377 378 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 379 val |= g4x_infoframe_index(type); 380 381 /* The DIP control register spec says that we need to update the AVI 382 * infoframe without clearing its enable bit */ 383 if (type != HDMI_INFOFRAME_TYPE_AVI) 384 val &= ~g4x_infoframe_enable(type); 385 386 I915_WRITE(reg, val); 387 388 for (i = 0; i < len; i += 4) { 389 I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data); 390 data++; 391 } 392 /* Write every possible data byte to force correct ECC calculation. */ 393 for (; i < VIDEO_DIP_DATA_SIZE; i += 4) 394 I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), 0); 395 396 val |= g4x_infoframe_enable(type); 397 val &= ~VIDEO_DIP_FREQ_MASK; 398 val |= VIDEO_DIP_FREQ_VSYNC; 399 400 I915_WRITE(reg, val); 401 POSTING_READ(reg); 402 } 403 404 static void cpt_read_infoframe(struct intel_encoder *encoder, 405 const struct intel_crtc_state *crtc_state, 406 unsigned int type, 407 void *frame, ssize_t len) 408 { 409 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 410 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 411 u32 val, *data = frame; 412 int i; 413 414 val = I915_READ(TVIDEO_DIP_CTL(crtc->pipe)); 415 416 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 417 val |= g4x_infoframe_index(type); 418 419 I915_WRITE(TVIDEO_DIP_CTL(crtc->pipe), val); 420 421 for (i = 0; i < len; i += 4) 422 *data++ = I915_READ(TVIDEO_DIP_DATA(crtc->pipe)); 423 } 424 425 static u32 cpt_infoframes_enabled(struct intel_encoder *encoder, 426 const struct intel_crtc_state *pipe_config) 427 { 428 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 429 enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe; 430 u32 val = I915_READ(TVIDEO_DIP_CTL(pipe)); 431 432 if ((val & VIDEO_DIP_ENABLE) == 0) 433 return 0; 434 435 return val & (VIDEO_DIP_ENABLE_AVI | 436 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 437 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 438 } 439 440 static void vlv_write_infoframe(struct intel_encoder *encoder, 441 const struct intel_crtc_state *crtc_state, 442 unsigned int type, 443 const void *frame, ssize_t len) 444 { 445 const u32 *data = frame; 446 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 447 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 448 i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe); 449 u32 val = I915_READ(reg); 450 int i; 451 452 WARN(!(val & VIDEO_DIP_ENABLE), "Writing DIP with CTL reg disabled\n"); 453 454 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 455 val |= g4x_infoframe_index(type); 456 457 val &= ~g4x_infoframe_enable(type); 458 459 I915_WRITE(reg, val); 460 461 for (i = 0; i < len; i += 4) { 462 I915_WRITE(VLV_TVIDEO_DIP_DATA(intel_crtc->pipe), *data); 463 data++; 464 } 465 /* Write every possible data byte to force correct ECC calculation. */ 466 for (; i < VIDEO_DIP_DATA_SIZE; i += 4) 467 I915_WRITE(VLV_TVIDEO_DIP_DATA(intel_crtc->pipe), 0); 468 469 val |= g4x_infoframe_enable(type); 470 val &= ~VIDEO_DIP_FREQ_MASK; 471 val |= VIDEO_DIP_FREQ_VSYNC; 472 473 I915_WRITE(reg, val); 474 POSTING_READ(reg); 475 } 476 477 static void vlv_read_infoframe(struct intel_encoder *encoder, 478 const struct intel_crtc_state *crtc_state, 479 unsigned int type, 480 void *frame, ssize_t len) 481 { 482 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 483 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 484 u32 val, *data = frame; 485 int i; 486 487 val = I915_READ(VLV_TVIDEO_DIP_CTL(crtc->pipe)); 488 489 val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */ 490 val |= g4x_infoframe_index(type); 491 492 I915_WRITE(VLV_TVIDEO_DIP_CTL(crtc->pipe), val); 493 494 for (i = 0; i < len; i += 4) 495 *data++ = I915_READ(VLV_TVIDEO_DIP_DATA(crtc->pipe)); 496 } 497 498 static u32 vlv_infoframes_enabled(struct intel_encoder *encoder, 499 const struct intel_crtc_state *pipe_config) 500 { 501 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 502 enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe; 503 u32 val = I915_READ(VLV_TVIDEO_DIP_CTL(pipe)); 504 505 if ((val & VIDEO_DIP_ENABLE) == 0) 506 return 0; 507 508 if ((val & VIDEO_DIP_PORT_MASK) != VIDEO_DIP_PORT(encoder->port)) 509 return 0; 510 511 return val & (VIDEO_DIP_ENABLE_AVI | 512 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 513 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 514 } 515 516 static void hsw_write_infoframe(struct intel_encoder *encoder, 517 const struct intel_crtc_state *crtc_state, 518 unsigned int type, 519 const void *frame, ssize_t len) 520 { 521 const u32 *data = frame; 522 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 523 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 524 i915_reg_t ctl_reg = HSW_TVIDEO_DIP_CTL(cpu_transcoder); 525 int data_size; 526 int i; 527 u32 val = I915_READ(ctl_reg); 528 529 data_size = hsw_dip_data_size(dev_priv, type); 530 531 WARN_ON(len > data_size); 532 533 val &= ~hsw_infoframe_enable(type); 534 I915_WRITE(ctl_reg, val); 535 536 for (i = 0; i < len; i += 4) { 537 I915_WRITE(hsw_dip_data_reg(dev_priv, cpu_transcoder, 538 type, i >> 2), *data); 539 data++; 540 } 541 /* Write every possible data byte to force correct ECC calculation. */ 542 for (; i < data_size; i += 4) 543 I915_WRITE(hsw_dip_data_reg(dev_priv, cpu_transcoder, 544 type, i >> 2), 0); 545 546 val |= hsw_infoframe_enable(type); 547 I915_WRITE(ctl_reg, val); 548 POSTING_READ(ctl_reg); 549 } 550 551 static void hsw_read_infoframe(struct intel_encoder *encoder, 552 const struct intel_crtc_state *crtc_state, 553 unsigned int type, 554 void *frame, ssize_t len) 555 { 556 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 557 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 558 u32 val __unused, *data = frame; 559 int i; 560 561 val = I915_READ(HSW_TVIDEO_DIP_CTL(cpu_transcoder)); 562 563 for (i = 0; i < len; i += 4) 564 *data++ = I915_READ(hsw_dip_data_reg(dev_priv, cpu_transcoder, 565 type, i >> 2)); 566 } 567 568 static u32 hsw_infoframes_enabled(struct intel_encoder *encoder, 569 const struct intel_crtc_state *pipe_config) 570 { 571 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 572 u32 val = I915_READ(HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder)); 573 u32 mask; 574 575 mask = (VIDEO_DIP_ENABLE_VSC_HSW | VIDEO_DIP_ENABLE_AVI_HSW | 576 VIDEO_DIP_ENABLE_GCP_HSW | VIDEO_DIP_ENABLE_VS_HSW | 577 VIDEO_DIP_ENABLE_GMP_HSW | VIDEO_DIP_ENABLE_SPD_HSW); 578 579 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 580 mask |= VIDEO_DIP_ENABLE_DRM_GLK; 581 582 return val & mask; 583 } 584 585 static const u8 infoframe_type_to_idx[] = { 586 HDMI_PACKET_TYPE_GENERAL_CONTROL, 587 HDMI_PACKET_TYPE_GAMUT_METADATA, 588 DP_SDP_VSC, 589 HDMI_INFOFRAME_TYPE_AVI, 590 HDMI_INFOFRAME_TYPE_SPD, 591 HDMI_INFOFRAME_TYPE_VENDOR, 592 HDMI_INFOFRAME_TYPE_DRM, 593 }; 594 595 u32 intel_hdmi_infoframe_enable(unsigned int type) 596 { 597 int i; 598 599 for (i = 0; i < ARRAY_SIZE(infoframe_type_to_idx); i++) { 600 if (infoframe_type_to_idx[i] == type) 601 return BIT(i); 602 } 603 604 return 0; 605 } 606 607 u32 intel_hdmi_infoframes_enabled(struct intel_encoder *encoder, 608 const struct intel_crtc_state *crtc_state) 609 { 610 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 611 struct intel_digital_port *dig_port = enc_to_dig_port(encoder); 612 u32 val, ret = 0; 613 int i; 614 615 val = dig_port->infoframes_enabled(encoder, crtc_state); 616 617 /* map from hardware bits to dip idx */ 618 for (i = 0; i < ARRAY_SIZE(infoframe_type_to_idx); i++) { 619 unsigned int type = infoframe_type_to_idx[i]; 620 621 if (HAS_DDI(dev_priv)) { 622 if (val & hsw_infoframe_enable(type)) 623 ret |= BIT(i); 624 } else { 625 if (val & g4x_infoframe_enable(type)) 626 ret |= BIT(i); 627 } 628 } 629 630 return ret; 631 } 632 633 /* 634 * The data we write to the DIP data buffer registers is 1 byte bigger than the 635 * HDMI infoframe size because of an ECC/reserved byte at position 3 (starting 636 * at 0). It's also a byte used by DisplayPort so the same DIP registers can be 637 * used for both technologies. 638 * 639 * DW0: Reserved/ECC/DP | HB2 | HB1 | HB0 640 * DW1: DB3 | DB2 | DB1 | DB0 641 * DW2: DB7 | DB6 | DB5 | DB4 642 * DW3: ... 643 * 644 * (HB is Header Byte, DB is Data Byte) 645 * 646 * The hdmi pack() functions don't know about that hardware specific hole so we 647 * trick them by giving an offset into the buffer and moving back the header 648 * bytes by one. 649 */ 650 static void intel_write_infoframe(struct intel_encoder *encoder, 651 const struct intel_crtc_state *crtc_state, 652 enum hdmi_infoframe_type type, 653 const union hdmi_infoframe *frame) 654 { 655 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); 656 u8 buffer[VIDEO_DIP_DATA_SIZE]; 657 ssize_t len; 658 659 if ((crtc_state->infoframes.enable & 660 intel_hdmi_infoframe_enable(type)) == 0) 661 return; 662 663 if (WARN_ON(frame->any.type != type)) 664 return; 665 666 /* see comment above for the reason for this offset */ 667 len = hdmi_infoframe_pack_only(frame, buffer + 1, sizeof(buffer) - 1); 668 if (WARN_ON(len < 0)) 669 return; 670 671 /* Insert the 'hole' (see big comment above) at position 3 */ 672 memmove(&buffer[0], &buffer[1], 3); 673 buffer[3] = 0; 674 len++; 675 676 intel_dig_port->write_infoframe(encoder, crtc_state, type, buffer, len); 677 } 678 679 void intel_read_infoframe(struct intel_encoder *encoder, 680 const struct intel_crtc_state *crtc_state, 681 enum hdmi_infoframe_type type, 682 union hdmi_infoframe *frame) 683 { 684 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); 685 u8 buffer[VIDEO_DIP_DATA_SIZE]; 686 int ret; 687 688 if ((crtc_state->infoframes.enable & 689 intel_hdmi_infoframe_enable(type)) == 0) 690 return; 691 692 intel_dig_port->read_infoframe(encoder, crtc_state, 693 type, buffer, sizeof(buffer)); 694 695 /* Fill the 'hole' (see big comment above) at position 3 */ 696 memmove(&buffer[1], &buffer[0], 3); 697 698 /* see comment above for the reason for this offset */ 699 ret = hdmi_infoframe_unpack(frame, buffer + 1, sizeof(buffer) - 1); 700 if (ret) { 701 DRM_DEBUG_KMS("Failed to unpack infoframe type 0x%02x\n", type); 702 return; 703 } 704 705 if (frame->any.type != type) 706 DRM_DEBUG_KMS("Found the wrong infoframe type 0x%x (expected 0x%02x)\n", 707 frame->any.type, type); 708 } 709 710 static bool 711 intel_hdmi_compute_avi_infoframe(struct intel_encoder *encoder, 712 struct intel_crtc_state *crtc_state, 713 struct drm_connector_state *conn_state) 714 { 715 struct hdmi_avi_infoframe *frame = &crtc_state->infoframes.avi.avi; 716 const struct drm_display_mode *adjusted_mode = 717 &crtc_state->hw.adjusted_mode; 718 struct drm_connector *connector = conn_state->connector; 719 int ret; 720 721 if (!crtc_state->has_infoframe) 722 return true; 723 724 crtc_state->infoframes.enable |= 725 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_AVI); 726 727 ret = drm_hdmi_avi_infoframe_from_display_mode(frame, connector, 728 adjusted_mode); 729 if (ret) 730 return false; 731 732 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) 733 frame->colorspace = HDMI_COLORSPACE_YUV420; 734 else if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) 735 frame->colorspace = HDMI_COLORSPACE_YUV444; 736 else 737 frame->colorspace = HDMI_COLORSPACE_RGB; 738 739 drm_hdmi_avi_infoframe_colorspace(frame, conn_state); 740 741 /* nonsense combination */ 742 WARN_ON(crtc_state->limited_color_range && 743 crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB); 744 745 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_RGB) { 746 drm_hdmi_avi_infoframe_quant_range(frame, connector, 747 adjusted_mode, 748 crtc_state->limited_color_range ? 749 HDMI_QUANTIZATION_RANGE_LIMITED : 750 HDMI_QUANTIZATION_RANGE_FULL); 751 } else { 752 frame->quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT; 753 frame->ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_LIMITED; 754 } 755 756 drm_hdmi_avi_infoframe_content_type(frame, conn_state); 757 758 /* TODO: handle pixel repetition for YCBCR420 outputs */ 759 760 ret = hdmi_avi_infoframe_check(frame); 761 if (WARN_ON(ret)) 762 return false; 763 764 return true; 765 } 766 767 static bool 768 intel_hdmi_compute_spd_infoframe(struct intel_encoder *encoder, 769 struct intel_crtc_state *crtc_state, 770 struct drm_connector_state *conn_state) 771 { 772 struct hdmi_spd_infoframe *frame = &crtc_state->infoframes.spd.spd; 773 int ret; 774 775 if (!crtc_state->has_infoframe) 776 return true; 777 778 crtc_state->infoframes.enable |= 779 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_SPD); 780 781 ret = hdmi_spd_infoframe_init(frame, "Intel", "Integrated gfx"); 782 if (WARN_ON(ret)) 783 return false; 784 785 frame->sdi = HDMI_SPD_SDI_PC; 786 787 ret = hdmi_spd_infoframe_check(frame); 788 if (WARN_ON(ret)) 789 return false; 790 791 return true; 792 } 793 794 static bool 795 intel_hdmi_compute_hdmi_infoframe(struct intel_encoder *encoder, 796 struct intel_crtc_state *crtc_state, 797 struct drm_connector_state *conn_state) 798 { 799 struct hdmi_vendor_infoframe *frame = 800 &crtc_state->infoframes.hdmi.vendor.hdmi; 801 const struct drm_display_info *info = 802 &conn_state->connector->display_info; 803 int ret; 804 805 if (!crtc_state->has_infoframe || !info->has_hdmi_infoframe) 806 return true; 807 808 crtc_state->infoframes.enable |= 809 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_VENDOR); 810 811 ret = drm_hdmi_vendor_infoframe_from_display_mode(frame, 812 conn_state->connector, 813 &crtc_state->hw.adjusted_mode); 814 if (WARN_ON(ret)) 815 return false; 816 817 ret = hdmi_vendor_infoframe_check(frame); 818 if (WARN_ON(ret)) 819 return false; 820 821 return true; 822 } 823 824 static bool 825 intel_hdmi_compute_drm_infoframe(struct intel_encoder *encoder, 826 struct intel_crtc_state *crtc_state, 827 struct drm_connector_state *conn_state) 828 { 829 struct hdmi_drm_infoframe *frame = &crtc_state->infoframes.drm.drm; 830 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 831 int ret; 832 833 if (!(INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))) 834 return true; 835 836 if (!crtc_state->has_infoframe) 837 return true; 838 839 if (!conn_state->hdr_output_metadata) 840 return true; 841 842 crtc_state->infoframes.enable |= 843 intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_DRM); 844 845 ret = drm_hdmi_infoframe_set_hdr_metadata(frame, conn_state); 846 if (ret < 0) { 847 DRM_DEBUG_KMS("couldn't set HDR metadata in infoframe\n"); 848 return false; 849 } 850 851 ret = hdmi_drm_infoframe_check(frame); 852 if (WARN_ON(ret)) 853 return false; 854 855 return true; 856 } 857 858 static void g4x_set_infoframes(struct intel_encoder *encoder, 859 bool enable, 860 const struct intel_crtc_state *crtc_state, 861 const struct drm_connector_state *conn_state) 862 { 863 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 864 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); 865 struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi; 866 i915_reg_t reg = VIDEO_DIP_CTL; 867 u32 val = I915_READ(reg); 868 u32 port = VIDEO_DIP_PORT(encoder->port); 869 870 assert_hdmi_port_disabled(intel_hdmi); 871 872 /* If the registers were not initialized yet, they might be zeroes, 873 * which means we're selecting the AVI DIP and we're setting its 874 * frequency to once. This seems to really confuse the HW and make 875 * things stop working (the register spec says the AVI always needs to 876 * be sent every VSync). So here we avoid writing to the register more 877 * than we need and also explicitly select the AVI DIP and explicitly 878 * set its frequency to every VSync. Avoiding to write it twice seems to 879 * be enough to solve the problem, but being defensive shouldn't hurt us 880 * either. */ 881 val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC; 882 883 if (!enable) { 884 if (!(val & VIDEO_DIP_ENABLE)) 885 return; 886 if (port != (val & VIDEO_DIP_PORT_MASK)) { 887 DRM_DEBUG_KMS("video DIP still enabled on port %c\n", 888 (val & VIDEO_DIP_PORT_MASK) >> 29); 889 return; 890 } 891 val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI | 892 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_SPD); 893 I915_WRITE(reg, val); 894 POSTING_READ(reg); 895 return; 896 } 897 898 if (port != (val & VIDEO_DIP_PORT_MASK)) { 899 if (val & VIDEO_DIP_ENABLE) { 900 DRM_DEBUG_KMS("video DIP already enabled on port %c\n", 901 (val & VIDEO_DIP_PORT_MASK) >> 29); 902 return; 903 } 904 val &= ~VIDEO_DIP_PORT_MASK; 905 val |= port; 906 } 907 908 val |= VIDEO_DIP_ENABLE; 909 val &= ~(VIDEO_DIP_ENABLE_AVI | 910 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_SPD); 911 912 I915_WRITE(reg, val); 913 POSTING_READ(reg); 914 915 intel_write_infoframe(encoder, crtc_state, 916 HDMI_INFOFRAME_TYPE_AVI, 917 &crtc_state->infoframes.avi); 918 intel_write_infoframe(encoder, crtc_state, 919 HDMI_INFOFRAME_TYPE_SPD, 920 &crtc_state->infoframes.spd); 921 intel_write_infoframe(encoder, crtc_state, 922 HDMI_INFOFRAME_TYPE_VENDOR, 923 &crtc_state->infoframes.hdmi); 924 } 925 926 /* 927 * Determine if default_phase=1 can be indicated in the GCP infoframe. 928 * 929 * From HDMI specification 1.4a: 930 * - The first pixel of each Video Data Period shall always have a pixel packing phase of 0 931 * - The first pixel following each Video Data Period shall have a pixel packing phase of 0 932 * - The PP bits shall be constant for all GCPs and will be equal to the last packing phase 933 * - The first pixel following every transition of HSYNC or VSYNC shall have a pixel packing 934 * phase of 0 935 */ 936 static bool gcp_default_phase_possible(int pipe_bpp, 937 const struct drm_display_mode *mode) 938 { 939 unsigned int pixels_per_group; 940 941 switch (pipe_bpp) { 942 case 30: 943 /* 4 pixels in 5 clocks */ 944 pixels_per_group = 4; 945 break; 946 case 36: 947 /* 2 pixels in 3 clocks */ 948 pixels_per_group = 2; 949 break; 950 case 48: 951 /* 1 pixel in 2 clocks */ 952 pixels_per_group = 1; 953 break; 954 default: 955 /* phase information not relevant for 8bpc */ 956 return false; 957 } 958 959 return mode->crtc_hdisplay % pixels_per_group == 0 && 960 mode->crtc_htotal % pixels_per_group == 0 && 961 mode->crtc_hblank_start % pixels_per_group == 0 && 962 mode->crtc_hblank_end % pixels_per_group == 0 && 963 mode->crtc_hsync_start % pixels_per_group == 0 && 964 mode->crtc_hsync_end % pixels_per_group == 0 && 965 ((mode->flags & DRM_MODE_FLAG_INTERLACE) == 0 || 966 mode->crtc_htotal/2 % pixels_per_group == 0); 967 } 968 969 static bool intel_hdmi_set_gcp_infoframe(struct intel_encoder *encoder, 970 const struct intel_crtc_state *crtc_state, 971 const struct drm_connector_state *conn_state) 972 { 973 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 974 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 975 i915_reg_t reg; 976 977 if ((crtc_state->infoframes.enable & 978 intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GENERAL_CONTROL)) == 0) 979 return false; 980 981 if (HAS_DDI(dev_priv)) 982 reg = HSW_TVIDEO_DIP_GCP(crtc_state->cpu_transcoder); 983 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 984 reg = VLV_TVIDEO_DIP_GCP(crtc->pipe); 985 else if (HAS_PCH_SPLIT(dev_priv)) 986 reg = TVIDEO_DIP_GCP(crtc->pipe); 987 else 988 return false; 989 990 I915_WRITE(reg, crtc_state->infoframes.gcp); 991 992 return true; 993 } 994 995 void intel_hdmi_read_gcp_infoframe(struct intel_encoder *encoder, 996 struct intel_crtc_state *crtc_state) 997 { 998 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 999 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1000 i915_reg_t reg; 1001 1002 if ((crtc_state->infoframes.enable & 1003 intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GENERAL_CONTROL)) == 0) 1004 return; 1005 1006 if (HAS_DDI(dev_priv)) 1007 reg = HSW_TVIDEO_DIP_GCP(crtc_state->cpu_transcoder); 1008 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 1009 reg = VLV_TVIDEO_DIP_GCP(crtc->pipe); 1010 else if (HAS_PCH_SPLIT(dev_priv)) 1011 reg = TVIDEO_DIP_GCP(crtc->pipe); 1012 else 1013 return; 1014 1015 crtc_state->infoframes.gcp = I915_READ(reg); 1016 } 1017 1018 static void intel_hdmi_compute_gcp_infoframe(struct intel_encoder *encoder, 1019 struct intel_crtc_state *crtc_state, 1020 struct drm_connector_state *conn_state) 1021 { 1022 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1023 1024 if (IS_G4X(dev_priv) || !crtc_state->has_infoframe) 1025 return; 1026 1027 crtc_state->infoframes.enable |= 1028 intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GENERAL_CONTROL); 1029 1030 /* Indicate color indication for deep color mode */ 1031 if (crtc_state->pipe_bpp > 24) 1032 crtc_state->infoframes.gcp |= GCP_COLOR_INDICATION; 1033 1034 /* Enable default_phase whenever the display mode is suitably aligned */ 1035 if (gcp_default_phase_possible(crtc_state->pipe_bpp, 1036 &crtc_state->hw.adjusted_mode)) 1037 crtc_state->infoframes.gcp |= GCP_DEFAULT_PHASE_ENABLE; 1038 } 1039 1040 static void ibx_set_infoframes(struct intel_encoder *encoder, 1041 bool enable, 1042 const struct intel_crtc_state *crtc_state, 1043 const struct drm_connector_state *conn_state) 1044 { 1045 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1046 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 1047 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); 1048 struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi; 1049 i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe); 1050 u32 val = I915_READ(reg); 1051 u32 port = VIDEO_DIP_PORT(encoder->port); 1052 1053 assert_hdmi_port_disabled(intel_hdmi); 1054 1055 /* See the big comment in g4x_set_infoframes() */ 1056 val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC; 1057 1058 if (!enable) { 1059 if (!(val & VIDEO_DIP_ENABLE)) 1060 return; 1061 val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI | 1062 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1063 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1064 I915_WRITE(reg, val); 1065 POSTING_READ(reg); 1066 return; 1067 } 1068 1069 if (port != (val & VIDEO_DIP_PORT_MASK)) { 1070 WARN(val & VIDEO_DIP_ENABLE, 1071 "DIP already enabled on port %c\n", 1072 (val & VIDEO_DIP_PORT_MASK) >> 29); 1073 val &= ~VIDEO_DIP_PORT_MASK; 1074 val |= port; 1075 } 1076 1077 val |= VIDEO_DIP_ENABLE; 1078 val &= ~(VIDEO_DIP_ENABLE_AVI | 1079 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1080 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1081 1082 if (intel_hdmi_set_gcp_infoframe(encoder, crtc_state, conn_state)) 1083 val |= VIDEO_DIP_ENABLE_GCP; 1084 1085 I915_WRITE(reg, val); 1086 POSTING_READ(reg); 1087 1088 intel_write_infoframe(encoder, crtc_state, 1089 HDMI_INFOFRAME_TYPE_AVI, 1090 &crtc_state->infoframes.avi); 1091 intel_write_infoframe(encoder, crtc_state, 1092 HDMI_INFOFRAME_TYPE_SPD, 1093 &crtc_state->infoframes.spd); 1094 intel_write_infoframe(encoder, crtc_state, 1095 HDMI_INFOFRAME_TYPE_VENDOR, 1096 &crtc_state->infoframes.hdmi); 1097 } 1098 1099 static void cpt_set_infoframes(struct intel_encoder *encoder, 1100 bool enable, 1101 const struct intel_crtc_state *crtc_state, 1102 const struct drm_connector_state *conn_state) 1103 { 1104 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1105 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 1106 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1107 i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe); 1108 u32 val = I915_READ(reg); 1109 1110 assert_hdmi_port_disabled(intel_hdmi); 1111 1112 /* See the big comment in g4x_set_infoframes() */ 1113 val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC; 1114 1115 if (!enable) { 1116 if (!(val & VIDEO_DIP_ENABLE)) 1117 return; 1118 val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI | 1119 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1120 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1121 I915_WRITE(reg, val); 1122 POSTING_READ(reg); 1123 return; 1124 } 1125 1126 /* Set both together, unset both together: see the spec. */ 1127 val |= VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI; 1128 val &= ~(VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1129 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1130 1131 if (intel_hdmi_set_gcp_infoframe(encoder, crtc_state, conn_state)) 1132 val |= VIDEO_DIP_ENABLE_GCP; 1133 1134 I915_WRITE(reg, val); 1135 POSTING_READ(reg); 1136 1137 intel_write_infoframe(encoder, crtc_state, 1138 HDMI_INFOFRAME_TYPE_AVI, 1139 &crtc_state->infoframes.avi); 1140 intel_write_infoframe(encoder, crtc_state, 1141 HDMI_INFOFRAME_TYPE_SPD, 1142 &crtc_state->infoframes.spd); 1143 intel_write_infoframe(encoder, crtc_state, 1144 HDMI_INFOFRAME_TYPE_VENDOR, 1145 &crtc_state->infoframes.hdmi); 1146 } 1147 1148 static void vlv_set_infoframes(struct intel_encoder *encoder, 1149 bool enable, 1150 const struct intel_crtc_state *crtc_state, 1151 const struct drm_connector_state *conn_state) 1152 { 1153 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1154 struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); 1155 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1156 i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe); 1157 u32 val = I915_READ(reg); 1158 u32 port = VIDEO_DIP_PORT(encoder->port); 1159 1160 assert_hdmi_port_disabled(intel_hdmi); 1161 1162 /* See the big comment in g4x_set_infoframes() */ 1163 val |= VIDEO_DIP_SELECT_AVI | VIDEO_DIP_FREQ_VSYNC; 1164 1165 if (!enable) { 1166 if (!(val & VIDEO_DIP_ENABLE)) 1167 return; 1168 val &= ~(VIDEO_DIP_ENABLE | VIDEO_DIP_ENABLE_AVI | 1169 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1170 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1171 I915_WRITE(reg, val); 1172 POSTING_READ(reg); 1173 return; 1174 } 1175 1176 if (port != (val & VIDEO_DIP_PORT_MASK)) { 1177 WARN(val & VIDEO_DIP_ENABLE, 1178 "DIP already enabled on port %c\n", 1179 (val & VIDEO_DIP_PORT_MASK) >> 29); 1180 val &= ~VIDEO_DIP_PORT_MASK; 1181 val |= port; 1182 } 1183 1184 val |= VIDEO_DIP_ENABLE; 1185 val &= ~(VIDEO_DIP_ENABLE_AVI | 1186 VIDEO_DIP_ENABLE_VENDOR | VIDEO_DIP_ENABLE_GAMUT | 1187 VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_ENABLE_GCP); 1188 1189 if (intel_hdmi_set_gcp_infoframe(encoder, crtc_state, conn_state)) 1190 val |= VIDEO_DIP_ENABLE_GCP; 1191 1192 I915_WRITE(reg, val); 1193 POSTING_READ(reg); 1194 1195 intel_write_infoframe(encoder, crtc_state, 1196 HDMI_INFOFRAME_TYPE_AVI, 1197 &crtc_state->infoframes.avi); 1198 intel_write_infoframe(encoder, crtc_state, 1199 HDMI_INFOFRAME_TYPE_SPD, 1200 &crtc_state->infoframes.spd); 1201 intel_write_infoframe(encoder, crtc_state, 1202 HDMI_INFOFRAME_TYPE_VENDOR, 1203 &crtc_state->infoframes.hdmi); 1204 } 1205 1206 static void hsw_set_infoframes(struct intel_encoder *encoder, 1207 bool enable, 1208 const struct intel_crtc_state *crtc_state, 1209 const struct drm_connector_state *conn_state) 1210 { 1211 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1212 i915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state->cpu_transcoder); 1213 u32 val = I915_READ(reg); 1214 1215 assert_hdmi_transcoder_func_disabled(dev_priv, 1216 crtc_state->cpu_transcoder); 1217 1218 val &= ~(VIDEO_DIP_ENABLE_VSC_HSW | VIDEO_DIP_ENABLE_AVI_HSW | 1219 VIDEO_DIP_ENABLE_GCP_HSW | VIDEO_DIP_ENABLE_VS_HSW | 1220 VIDEO_DIP_ENABLE_GMP_HSW | VIDEO_DIP_ENABLE_SPD_HSW | 1221 VIDEO_DIP_ENABLE_DRM_GLK); 1222 1223 if (!enable) { 1224 I915_WRITE(reg, val); 1225 POSTING_READ(reg); 1226 return; 1227 } 1228 1229 if (intel_hdmi_set_gcp_infoframe(encoder, crtc_state, conn_state)) 1230 val |= VIDEO_DIP_ENABLE_GCP_HSW; 1231 1232 I915_WRITE(reg, val); 1233 POSTING_READ(reg); 1234 1235 intel_write_infoframe(encoder, crtc_state, 1236 HDMI_INFOFRAME_TYPE_AVI, 1237 &crtc_state->infoframes.avi); 1238 intel_write_infoframe(encoder, crtc_state, 1239 HDMI_INFOFRAME_TYPE_SPD, 1240 &crtc_state->infoframes.spd); 1241 intel_write_infoframe(encoder, crtc_state, 1242 HDMI_INFOFRAME_TYPE_VENDOR, 1243 &crtc_state->infoframes.hdmi); 1244 intel_write_infoframe(encoder, crtc_state, 1245 HDMI_INFOFRAME_TYPE_DRM, 1246 &crtc_state->infoframes.drm); 1247 } 1248 1249 void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable) 1250 { 1251 struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi)); 1252 struct i2c_adapter *adapter = 1253 intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); 1254 1255 if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI) 1256 return; 1257 1258 DRM_DEBUG_KMS("%s DP dual mode adaptor TMDS output\n", 1259 enable ? "Enabling" : "Disabling"); 1260 1261 drm_dp_dual_mode_set_tmds_output(hdmi->dp_dual_mode.type, 1262 adapter, enable); 1263 } 1264 1265 static int intel_hdmi_hdcp_read(struct intel_digital_port *intel_dig_port, 1266 unsigned int offset, void *buffer, size_t size) 1267 { 1268 struct intel_hdmi *hdmi = &intel_dig_port->hdmi; 1269 struct drm_i915_private *dev_priv = 1270 intel_dig_port->base.base.dev->dev_private; 1271 struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, 1272 hdmi->ddc_bus); 1273 int ret; 1274 u8 start = offset & 0xff; 1275 struct i2c_msg msgs[] = { 1276 { 1277 .addr = DRM_HDCP_DDC_ADDR, 1278 .flags = 0, 1279 .len = 1, 1280 .buf = &start, 1281 }, 1282 { 1283 .addr = DRM_HDCP_DDC_ADDR, 1284 .flags = I2C_M_RD, 1285 .len = size, 1286 .buf = buffer 1287 } 1288 }; 1289 ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs)); 1290 if (ret == ARRAY_SIZE(msgs)) 1291 return 0; 1292 return ret >= 0 ? -EIO : ret; 1293 } 1294 1295 static int intel_hdmi_hdcp_write(struct intel_digital_port *intel_dig_port, 1296 unsigned int offset, void *buffer, size_t size) 1297 { 1298 struct intel_hdmi *hdmi = &intel_dig_port->hdmi; 1299 struct drm_i915_private *dev_priv = 1300 intel_dig_port->base.base.dev->dev_private; 1301 struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, 1302 hdmi->ddc_bus); 1303 int ret; 1304 u8 *write_buf; 1305 struct i2c_msg msg; 1306 1307 write_buf = kzalloc(size + 1, GFP_KERNEL); 1308 if (!write_buf) 1309 return -ENOMEM; 1310 1311 write_buf[0] = offset & 0xff; 1312 memcpy(&write_buf[1], buffer, size); 1313 1314 msg.addr = DRM_HDCP_DDC_ADDR; 1315 msg.flags = 0, 1316 msg.len = size + 1, 1317 msg.buf = write_buf; 1318 1319 ret = i2c_transfer(adapter, &msg, 1); 1320 if (ret == 1) 1321 ret = 0; 1322 else if (ret >= 0) 1323 ret = -EIO; 1324 1325 kfree(write_buf); 1326 return ret; 1327 } 1328 1329 static 1330 int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *intel_dig_port, 1331 u8 *an) 1332 { 1333 struct intel_hdmi *hdmi = &intel_dig_port->hdmi; 1334 struct drm_i915_private *dev_priv = 1335 intel_dig_port->base.base.dev->dev_private; 1336 struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, 1337 hdmi->ddc_bus); 1338 int ret; 1339 1340 ret = intel_hdmi_hdcp_write(intel_dig_port, DRM_HDCP_DDC_AN, an, 1341 DRM_HDCP_AN_LEN); 1342 if (ret) { 1343 DRM_DEBUG_KMS("Write An over DDC failed (%d)\n", ret); 1344 return ret; 1345 } 1346 1347 ret = intel_gmbus_output_aksv(adapter); 1348 if (ret < 0) { 1349 DRM_DEBUG_KMS("Failed to output aksv (%d)\n", ret); 1350 return ret; 1351 } 1352 return 0; 1353 } 1354 1355 static int intel_hdmi_hdcp_read_bksv(struct intel_digital_port *intel_dig_port, 1356 u8 *bksv) 1357 { 1358 int ret; 1359 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_BKSV, bksv, 1360 DRM_HDCP_KSV_LEN); 1361 if (ret) 1362 DRM_DEBUG_KMS("Read Bksv over DDC failed (%d)\n", ret); 1363 return ret; 1364 } 1365 1366 static 1367 int intel_hdmi_hdcp_read_bstatus(struct intel_digital_port *intel_dig_port, 1368 u8 *bstatus) 1369 { 1370 int ret; 1371 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_BSTATUS, 1372 bstatus, DRM_HDCP_BSTATUS_LEN); 1373 if (ret) 1374 DRM_DEBUG_KMS("Read bstatus over DDC failed (%d)\n", ret); 1375 return ret; 1376 } 1377 1378 static 1379 int intel_hdmi_hdcp_repeater_present(struct intel_digital_port *intel_dig_port, 1380 bool *repeater_present) 1381 { 1382 int ret; 1383 u8 val; 1384 1385 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_BCAPS, &val, 1); 1386 if (ret) { 1387 DRM_DEBUG_KMS("Read bcaps over DDC failed (%d)\n", ret); 1388 return ret; 1389 } 1390 *repeater_present = val & DRM_HDCP_DDC_BCAPS_REPEATER_PRESENT; 1391 return 0; 1392 } 1393 1394 static 1395 int intel_hdmi_hdcp_read_ri_prime(struct intel_digital_port *intel_dig_port, 1396 u8 *ri_prime) 1397 { 1398 int ret; 1399 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_RI_PRIME, 1400 ri_prime, DRM_HDCP_RI_LEN); 1401 if (ret) 1402 DRM_DEBUG_KMS("Read Ri' over DDC failed (%d)\n", ret); 1403 return ret; 1404 } 1405 1406 static 1407 int intel_hdmi_hdcp_read_ksv_ready(struct intel_digital_port *intel_dig_port, 1408 bool *ksv_ready) 1409 { 1410 int ret; 1411 u8 val; 1412 1413 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_BCAPS, &val, 1); 1414 if (ret) { 1415 DRM_DEBUG_KMS("Read bcaps over DDC failed (%d)\n", ret); 1416 return ret; 1417 } 1418 *ksv_ready = val & DRM_HDCP_DDC_BCAPS_KSV_FIFO_READY; 1419 return 0; 1420 } 1421 1422 static 1423 int intel_hdmi_hdcp_read_ksv_fifo(struct intel_digital_port *intel_dig_port, 1424 int num_downstream, u8 *ksv_fifo) 1425 { 1426 int ret; 1427 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_KSV_FIFO, 1428 ksv_fifo, num_downstream * DRM_HDCP_KSV_LEN); 1429 if (ret) { 1430 DRM_DEBUG_KMS("Read ksv fifo over DDC failed (%d)\n", ret); 1431 return ret; 1432 } 1433 return 0; 1434 } 1435 1436 static 1437 int intel_hdmi_hdcp_read_v_prime_part(struct intel_digital_port *intel_dig_port, 1438 int i, u32 *part) 1439 { 1440 int ret; 1441 1442 if (i >= DRM_HDCP_V_PRIME_NUM_PARTS) 1443 return -EINVAL; 1444 1445 ret = intel_hdmi_hdcp_read(intel_dig_port, DRM_HDCP_DDC_V_PRIME(i), 1446 part, DRM_HDCP_V_PRIME_PART_LEN); 1447 if (ret) 1448 DRM_DEBUG_KMS("Read V'[%d] over DDC failed (%d)\n", i, ret); 1449 return ret; 1450 } 1451 1452 static int kbl_repositioning_enc_en_signal(struct intel_connector *connector) 1453 { 1454 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); 1455 struct intel_digital_port *intel_dig_port = conn_to_dig_port(connector); 1456 struct drm_crtc *crtc = connector->base.state->crtc; 1457 struct intel_crtc *intel_crtc = container_of(crtc, 1458 struct intel_crtc, base); 1459 u32 scanline; 1460 int ret; 1461 1462 for (;;) { 1463 scanline = I915_READ(PIPEDSL(intel_crtc->pipe)); 1464 if (scanline > 100 && scanline < 200) 1465 break; 1466 usleep_range(25, 50); 1467 } 1468 1469 ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, false); 1470 if (ret) { 1471 DRM_ERROR("Disable HDCP signalling failed (%d)\n", ret); 1472 return ret; 1473 } 1474 ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, true); 1475 if (ret) { 1476 DRM_ERROR("Enable HDCP signalling failed (%d)\n", ret); 1477 return ret; 1478 } 1479 1480 return 0; 1481 } 1482 1483 static 1484 int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, 1485 bool enable) 1486 { 1487 struct intel_hdmi *hdmi = &intel_dig_port->hdmi; 1488 struct intel_connector *connector = hdmi->attached_connector; 1489 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); 1490 int ret; 1491 1492 if (!enable) 1493 usleep_range(6, 60); /* Bspec says >= 6us */ 1494 1495 ret = intel_ddi_toggle_hdcp_signalling(&intel_dig_port->base, enable); 1496 if (ret) { 1497 DRM_ERROR("%s HDCP signalling failed (%d)\n", 1498 enable ? "Enable" : "Disable", ret); 1499 return ret; 1500 } 1501 1502 /* 1503 * WA: To fix incorrect positioning of the window of 1504 * opportunity and enc_en signalling in KABYLAKE. 1505 */ 1506 if (IS_KABYLAKE(dev_priv) && enable) 1507 return kbl_repositioning_enc_en_signal(connector); 1508 1509 return 0; 1510 } 1511 1512 static 1513 bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port) 1514 { 1515 struct drm_i915_private *dev_priv = 1516 intel_dig_port->base.base.dev->dev_private; 1517 struct intel_connector *connector = 1518 intel_dig_port->hdmi.attached_connector; 1519 enum port port = intel_dig_port->base.port; 1520 enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; 1521 int ret; 1522 union { 1523 u32 reg; 1524 u8 shim[DRM_HDCP_RI_LEN]; 1525 } ri; 1526 1527 ret = intel_hdmi_hdcp_read_ri_prime(intel_dig_port, ri.shim); 1528 if (ret) 1529 return false; 1530 1531 I915_WRITE(HDCP_RPRIME(dev_priv, cpu_transcoder, port), ri.reg); 1532 1533 /* Wait for Ri prime match */ 1534 if (wait_for(I915_READ(HDCP_STATUS(dev_priv, cpu_transcoder, port)) & 1535 (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC), 1)) { 1536 DRM_ERROR("Ri' mismatch detected, link check failed (%x)\n", 1537 I915_READ(HDCP_STATUS(dev_priv, cpu_transcoder, 1538 port))); 1539 return false; 1540 } 1541 return true; 1542 } 1543 1544 struct hdcp2_hdmi_msg_timeout { 1545 u8 msg_id; 1546 u16 timeout; 1547 }; 1548 1549 static const struct hdcp2_hdmi_msg_timeout hdcp2_msg_timeout[] = { 1550 { HDCP_2_2_AKE_SEND_CERT, HDCP_2_2_CERT_TIMEOUT_MS, }, 1551 { HDCP_2_2_AKE_SEND_PAIRING_INFO, HDCP_2_2_PAIRING_TIMEOUT_MS, }, 1552 { HDCP_2_2_LC_SEND_LPRIME, HDCP_2_2_HDMI_LPRIME_TIMEOUT_MS, }, 1553 { HDCP_2_2_REP_SEND_RECVID_LIST, HDCP_2_2_RECVID_LIST_TIMEOUT_MS, }, 1554 { HDCP_2_2_REP_STREAM_READY, HDCP_2_2_STREAM_READY_TIMEOUT_MS, }, 1555 }; 1556 1557 static 1558 int intel_hdmi_hdcp2_read_rx_status(struct intel_digital_port *intel_dig_port, 1559 u8 *rx_status) 1560 { 1561 return intel_hdmi_hdcp_read(intel_dig_port, 1562 HDCP_2_2_HDMI_REG_RXSTATUS_OFFSET, 1563 rx_status, 1564 HDCP_2_2_HDMI_RXSTATUS_LEN); 1565 } 1566 1567 static int get_hdcp2_msg_timeout(u8 msg_id, bool is_paired) 1568 { 1569 int i; 1570 1571 if (msg_id == HDCP_2_2_AKE_SEND_HPRIME) { 1572 if (is_paired) 1573 return HDCP_2_2_HPRIME_PAIRED_TIMEOUT_MS; 1574 else 1575 return HDCP_2_2_HPRIME_NO_PAIRED_TIMEOUT_MS; 1576 } 1577 1578 for (i = 0; i < ARRAY_SIZE(hdcp2_msg_timeout); i++) { 1579 if (hdcp2_msg_timeout[i].msg_id == msg_id) 1580 return hdcp2_msg_timeout[i].timeout; 1581 } 1582 1583 return -EINVAL; 1584 } 1585 1586 static inline 1587 int hdcp2_detect_msg_availability(struct intel_digital_port *intel_digital_port, 1588 u8 msg_id, bool *msg_ready, 1589 ssize_t *msg_sz) 1590 { 1591 u8 rx_status[HDCP_2_2_HDMI_RXSTATUS_LEN]; 1592 int ret; 1593 1594 ret = intel_hdmi_hdcp2_read_rx_status(intel_digital_port, rx_status); 1595 if (ret < 0) { 1596 DRM_DEBUG_KMS("rx_status read failed. Err %d\n", ret); 1597 return ret; 1598 } 1599 1600 *msg_sz = ((HDCP_2_2_HDMI_RXSTATUS_MSG_SZ_HI(rx_status[1]) << 8) | 1601 rx_status[0]); 1602 1603 if (msg_id == HDCP_2_2_REP_SEND_RECVID_LIST) 1604 *msg_ready = (HDCP_2_2_HDMI_RXSTATUS_READY(rx_status[1]) && 1605 *msg_sz); 1606 else 1607 *msg_ready = *msg_sz; 1608 1609 return 0; 1610 } 1611 1612 static ssize_t 1613 intel_hdmi_hdcp2_wait_for_msg(struct intel_digital_port *intel_dig_port, 1614 u8 msg_id, bool paired) 1615 { 1616 bool msg_ready = false; 1617 int timeout, ret; 1618 ssize_t msg_sz = 0; 1619 1620 timeout = get_hdcp2_msg_timeout(msg_id, paired); 1621 if (timeout < 0) 1622 return timeout; 1623 1624 ret = __wait_for(ret = hdcp2_detect_msg_availability(intel_dig_port, 1625 msg_id, &msg_ready, 1626 &msg_sz), 1627 !ret && msg_ready && msg_sz, timeout * 1000, 1628 1000, 5 * 1000); 1629 if (ret) 1630 DRM_DEBUG_KMS("msg_id: %d, ret: %d, timeout: %d\n", 1631 msg_id, ret, timeout); 1632 1633 return ret ? ret : msg_sz; 1634 } 1635 1636 static 1637 int intel_hdmi_hdcp2_write_msg(struct intel_digital_port *intel_dig_port, 1638 void *buf, size_t size) 1639 { 1640 unsigned int offset; 1641 1642 offset = HDCP_2_2_HDMI_REG_WR_MSG_OFFSET; 1643 return intel_hdmi_hdcp_write(intel_dig_port, offset, buf, size); 1644 } 1645 1646 static 1647 int intel_hdmi_hdcp2_read_msg(struct intel_digital_port *intel_dig_port, 1648 u8 msg_id, void *buf, size_t size) 1649 { 1650 struct intel_hdmi *hdmi = &intel_dig_port->hdmi; 1651 struct intel_hdcp *hdcp = &hdmi->attached_connector->hdcp; 1652 unsigned int offset; 1653 ssize_t ret; 1654 1655 ret = intel_hdmi_hdcp2_wait_for_msg(intel_dig_port, msg_id, 1656 hdcp->is_paired); 1657 if (ret < 0) 1658 return ret; 1659 1660 /* 1661 * Available msg size should be equal to or lesser than the 1662 * available buffer. 1663 */ 1664 if (ret > size) { 1665 DRM_DEBUG_KMS("msg_sz(%zd) is more than exp size(%zu)\n", 1666 ret, size); 1667 return -1; 1668 } 1669 1670 offset = HDCP_2_2_HDMI_REG_RD_MSG_OFFSET; 1671 ret = intel_hdmi_hdcp_read(intel_dig_port, offset, buf, ret); 1672 if (ret) 1673 DRM_DEBUG_KMS("Failed to read msg_id: %d(%zd)\n", msg_id, ret); 1674 1675 return ret; 1676 } 1677 1678 static 1679 int intel_hdmi_hdcp2_check_link(struct intel_digital_port *intel_dig_port) 1680 { 1681 u8 rx_status[HDCP_2_2_HDMI_RXSTATUS_LEN]; 1682 int ret; 1683 1684 ret = intel_hdmi_hdcp2_read_rx_status(intel_dig_port, rx_status); 1685 if (ret) 1686 return ret; 1687 1688 /* 1689 * Re-auth request and Link Integrity Failures are represented by 1690 * same bit. i.e reauth_req. 1691 */ 1692 if (HDCP_2_2_HDMI_RXSTATUS_REAUTH_REQ(rx_status[1])) 1693 ret = HDCP_REAUTH_REQUEST; 1694 else if (HDCP_2_2_HDMI_RXSTATUS_READY(rx_status[1])) 1695 ret = HDCP_TOPOLOGY_CHANGE; 1696 1697 return ret; 1698 } 1699 1700 static 1701 int intel_hdmi_hdcp2_capable(struct intel_digital_port *intel_dig_port, 1702 bool *capable) 1703 { 1704 u8 hdcp2_version; 1705 int ret; 1706 1707 *capable = false; 1708 ret = intel_hdmi_hdcp_read(intel_dig_port, HDCP_2_2_HDMI_REG_VER_OFFSET, 1709 &hdcp2_version, sizeof(hdcp2_version)); 1710 if (!ret && hdcp2_version & HDCP_2_2_HDMI_SUPPORT_MASK) 1711 *capable = true; 1712 1713 return ret; 1714 } 1715 1716 static inline 1717 enum hdcp_wired_protocol intel_hdmi_hdcp2_protocol(void) 1718 { 1719 return HDCP_PROTOCOL_HDMI; 1720 } 1721 1722 static const struct intel_hdcp_shim intel_hdmi_hdcp_shim = { 1723 .write_an_aksv = intel_hdmi_hdcp_write_an_aksv, 1724 .read_bksv = intel_hdmi_hdcp_read_bksv, 1725 .read_bstatus = intel_hdmi_hdcp_read_bstatus, 1726 .repeater_present = intel_hdmi_hdcp_repeater_present, 1727 .read_ri_prime = intel_hdmi_hdcp_read_ri_prime, 1728 .read_ksv_ready = intel_hdmi_hdcp_read_ksv_ready, 1729 .read_ksv_fifo = intel_hdmi_hdcp_read_ksv_fifo, 1730 .read_v_prime_part = intel_hdmi_hdcp_read_v_prime_part, 1731 .toggle_signalling = intel_hdmi_hdcp_toggle_signalling, 1732 .check_link = intel_hdmi_hdcp_check_link, 1733 .write_2_2_msg = intel_hdmi_hdcp2_write_msg, 1734 .read_2_2_msg = intel_hdmi_hdcp2_read_msg, 1735 .check_2_2_link = intel_hdmi_hdcp2_check_link, 1736 .hdcp_2_2_capable = intel_hdmi_hdcp2_capable, 1737 .protocol = HDCP_PROTOCOL_HDMI, 1738 }; 1739 1740 static void intel_hdmi_prepare(struct intel_encoder *encoder, 1741 const struct intel_crtc_state *crtc_state) 1742 { 1743 struct drm_device *dev = encoder->base.dev; 1744 struct drm_i915_private *dev_priv = to_i915(dev); 1745 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1746 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1747 const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; 1748 u32 hdmi_val; 1749 1750 intel_dp_dual_mode_set_tmds_output(intel_hdmi, true); 1751 1752 hdmi_val = SDVO_ENCODING_HDMI; 1753 if (!HAS_PCH_SPLIT(dev_priv) && crtc_state->limited_color_range) 1754 hdmi_val |= HDMI_COLOR_RANGE_16_235; 1755 if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) 1756 hdmi_val |= SDVO_VSYNC_ACTIVE_HIGH; 1757 if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) 1758 hdmi_val |= SDVO_HSYNC_ACTIVE_HIGH; 1759 1760 if (crtc_state->pipe_bpp > 24) 1761 hdmi_val |= HDMI_COLOR_FORMAT_12bpc; 1762 else 1763 hdmi_val |= SDVO_COLOR_FORMAT_8bpc; 1764 1765 if (crtc_state->has_hdmi_sink) 1766 hdmi_val |= HDMI_MODE_SELECT_HDMI; 1767 1768 if (HAS_PCH_CPT(dev_priv)) 1769 hdmi_val |= SDVO_PIPE_SEL_CPT(crtc->pipe); 1770 else if (IS_CHERRYVIEW(dev_priv)) 1771 hdmi_val |= SDVO_PIPE_SEL_CHV(crtc->pipe); 1772 else 1773 hdmi_val |= SDVO_PIPE_SEL(crtc->pipe); 1774 1775 I915_WRITE(intel_hdmi->hdmi_reg, hdmi_val); 1776 POSTING_READ(intel_hdmi->hdmi_reg); 1777 } 1778 1779 static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, 1780 enum pipe *pipe) 1781 { 1782 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1783 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1784 intel_wakeref_t wakeref; 1785 bool ret; 1786 1787 wakeref = intel_display_power_get_if_enabled(dev_priv, 1788 encoder->power_domain); 1789 if (!wakeref) 1790 return false; 1791 1792 ret = intel_sdvo_port_enabled(dev_priv, intel_hdmi->hdmi_reg, pipe); 1793 1794 intel_display_power_put(dev_priv, encoder->power_domain, wakeref); 1795 1796 return ret; 1797 } 1798 1799 static void intel_hdmi_get_config(struct intel_encoder *encoder, 1800 struct intel_crtc_state *pipe_config) 1801 { 1802 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1803 struct drm_device *dev = encoder->base.dev; 1804 struct drm_i915_private *dev_priv = to_i915(dev); 1805 u32 tmp, flags = 0; 1806 int dotclock; 1807 1808 pipe_config->output_types |= BIT(INTEL_OUTPUT_HDMI); 1809 1810 tmp = I915_READ(intel_hdmi->hdmi_reg); 1811 1812 if (tmp & SDVO_HSYNC_ACTIVE_HIGH) 1813 flags |= DRM_MODE_FLAG_PHSYNC; 1814 else 1815 flags |= DRM_MODE_FLAG_NHSYNC; 1816 1817 if (tmp & SDVO_VSYNC_ACTIVE_HIGH) 1818 flags |= DRM_MODE_FLAG_PVSYNC; 1819 else 1820 flags |= DRM_MODE_FLAG_NVSYNC; 1821 1822 if (tmp & HDMI_MODE_SELECT_HDMI) 1823 pipe_config->has_hdmi_sink = true; 1824 1825 pipe_config->infoframes.enable |= 1826 intel_hdmi_infoframes_enabled(encoder, pipe_config); 1827 1828 if (pipe_config->infoframes.enable) 1829 pipe_config->has_infoframe = true; 1830 1831 if (tmp & HDMI_AUDIO_ENABLE) 1832 pipe_config->has_audio = true; 1833 1834 if (!HAS_PCH_SPLIT(dev_priv) && 1835 tmp & HDMI_COLOR_RANGE_16_235) 1836 pipe_config->limited_color_range = true; 1837 1838 pipe_config->hw.adjusted_mode.flags |= flags; 1839 1840 if ((tmp & SDVO_COLOR_FORMAT_MASK) == HDMI_COLOR_FORMAT_12bpc) 1841 dotclock = pipe_config->port_clock * 2 / 3; 1842 else 1843 dotclock = pipe_config->port_clock; 1844 1845 if (pipe_config->pixel_multiplier) 1846 dotclock /= pipe_config->pixel_multiplier; 1847 1848 pipe_config->hw.adjusted_mode.crtc_clock = dotclock; 1849 1850 pipe_config->lane_count = 4; 1851 1852 intel_hdmi_read_gcp_infoframe(encoder, pipe_config); 1853 1854 intel_read_infoframe(encoder, pipe_config, 1855 HDMI_INFOFRAME_TYPE_AVI, 1856 &pipe_config->infoframes.avi); 1857 intel_read_infoframe(encoder, pipe_config, 1858 HDMI_INFOFRAME_TYPE_SPD, 1859 &pipe_config->infoframes.spd); 1860 intel_read_infoframe(encoder, pipe_config, 1861 HDMI_INFOFRAME_TYPE_VENDOR, 1862 &pipe_config->infoframes.hdmi); 1863 } 1864 1865 static void intel_enable_hdmi_audio(struct intel_encoder *encoder, 1866 const struct intel_crtc_state *pipe_config, 1867 const struct drm_connector_state *conn_state) 1868 { 1869 struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); 1870 1871 WARN_ON(!pipe_config->has_hdmi_sink); 1872 DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n", 1873 pipe_name(crtc->pipe)); 1874 intel_audio_codec_enable(encoder, pipe_config, conn_state); 1875 } 1876 1877 static void g4x_enable_hdmi(struct intel_encoder *encoder, 1878 const struct intel_crtc_state *pipe_config, 1879 const struct drm_connector_state *conn_state) 1880 { 1881 struct drm_device *dev = encoder->base.dev; 1882 struct drm_i915_private *dev_priv = to_i915(dev); 1883 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1884 u32 temp; 1885 1886 temp = I915_READ(intel_hdmi->hdmi_reg); 1887 1888 temp |= SDVO_ENABLE; 1889 if (pipe_config->has_audio) 1890 temp |= HDMI_AUDIO_ENABLE; 1891 1892 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1893 POSTING_READ(intel_hdmi->hdmi_reg); 1894 1895 if (pipe_config->has_audio) 1896 intel_enable_hdmi_audio(encoder, pipe_config, conn_state); 1897 } 1898 1899 static void ibx_enable_hdmi(struct intel_encoder *encoder, 1900 const struct intel_crtc_state *pipe_config, 1901 const struct drm_connector_state *conn_state) 1902 { 1903 struct drm_device *dev = encoder->base.dev; 1904 struct drm_i915_private *dev_priv = to_i915(dev); 1905 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1906 u32 temp; 1907 1908 temp = I915_READ(intel_hdmi->hdmi_reg); 1909 1910 temp |= SDVO_ENABLE; 1911 if (pipe_config->has_audio) 1912 temp |= HDMI_AUDIO_ENABLE; 1913 1914 /* 1915 * HW workaround, need to write this twice for issue 1916 * that may result in first write getting masked. 1917 */ 1918 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1919 POSTING_READ(intel_hdmi->hdmi_reg); 1920 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1921 POSTING_READ(intel_hdmi->hdmi_reg); 1922 1923 /* 1924 * HW workaround, need to toggle enable bit off and on 1925 * for 12bpc with pixel repeat. 1926 * 1927 * FIXME: BSpec says this should be done at the end of 1928 * of the modeset sequence, so not sure if this isn't too soon. 1929 */ 1930 if (pipe_config->pipe_bpp > 24 && 1931 pipe_config->pixel_multiplier > 1) { 1932 I915_WRITE(intel_hdmi->hdmi_reg, temp & ~SDVO_ENABLE); 1933 POSTING_READ(intel_hdmi->hdmi_reg); 1934 1935 /* 1936 * HW workaround, need to write this twice for issue 1937 * that may result in first write getting masked. 1938 */ 1939 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1940 POSTING_READ(intel_hdmi->hdmi_reg); 1941 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1942 POSTING_READ(intel_hdmi->hdmi_reg); 1943 } 1944 1945 if (pipe_config->has_audio) 1946 intel_enable_hdmi_audio(encoder, pipe_config, conn_state); 1947 } 1948 1949 static void cpt_enable_hdmi(struct intel_encoder *encoder, 1950 const struct intel_crtc_state *pipe_config, 1951 const struct drm_connector_state *conn_state) 1952 { 1953 struct drm_device *dev = encoder->base.dev; 1954 struct drm_i915_private *dev_priv = to_i915(dev); 1955 struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); 1956 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 1957 enum pipe pipe = crtc->pipe; 1958 u32 temp; 1959 1960 temp = I915_READ(intel_hdmi->hdmi_reg); 1961 1962 temp |= SDVO_ENABLE; 1963 if (pipe_config->has_audio) 1964 temp |= HDMI_AUDIO_ENABLE; 1965 1966 /* 1967 * WaEnableHDMI8bpcBefore12bpc:snb,ivb 1968 * 1969 * The procedure for 12bpc is as follows: 1970 * 1. disable HDMI clock gating 1971 * 2. enable HDMI with 8bpc 1972 * 3. enable HDMI with 12bpc 1973 * 4. enable HDMI clock gating 1974 */ 1975 1976 if (pipe_config->pipe_bpp > 24) { 1977 I915_WRITE(TRANS_CHICKEN1(pipe), 1978 I915_READ(TRANS_CHICKEN1(pipe)) | 1979 TRANS_CHICKEN1_HDMIUNIT_GC_DISABLE); 1980 1981 temp &= ~SDVO_COLOR_FORMAT_MASK; 1982 temp |= SDVO_COLOR_FORMAT_8bpc; 1983 } 1984 1985 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1986 POSTING_READ(intel_hdmi->hdmi_reg); 1987 1988 if (pipe_config->pipe_bpp > 24) { 1989 temp &= ~SDVO_COLOR_FORMAT_MASK; 1990 temp |= HDMI_COLOR_FORMAT_12bpc; 1991 1992 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1993 POSTING_READ(intel_hdmi->hdmi_reg); 1994 1995 I915_WRITE(TRANS_CHICKEN1(pipe), 1996 I915_READ(TRANS_CHICKEN1(pipe)) & 1997 ~TRANS_CHICKEN1_HDMIUNIT_GC_DISABLE); 1998 } 1999 2000 if (pipe_config->has_audio) 2001 intel_enable_hdmi_audio(encoder, pipe_config, conn_state); 2002 } 2003 2004 static void vlv_enable_hdmi(struct intel_encoder *encoder, 2005 const struct intel_crtc_state *pipe_config, 2006 const struct drm_connector_state *conn_state) 2007 { 2008 } 2009 2010 static void intel_disable_hdmi(struct intel_encoder *encoder, 2011 const struct intel_crtc_state *old_crtc_state, 2012 const struct drm_connector_state *old_conn_state) 2013 { 2014 struct drm_device *dev = encoder->base.dev; 2015 struct drm_i915_private *dev_priv = to_i915(dev); 2016 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 2017 struct intel_digital_port *intel_dig_port = 2018 hdmi_to_dig_port(intel_hdmi); 2019 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); 2020 u32 temp; 2021 2022 temp = I915_READ(intel_hdmi->hdmi_reg); 2023 2024 temp &= ~(SDVO_ENABLE | HDMI_AUDIO_ENABLE); 2025 I915_WRITE(intel_hdmi->hdmi_reg, temp); 2026 POSTING_READ(intel_hdmi->hdmi_reg); 2027 2028 /* 2029 * HW workaround for IBX, we need to move the port 2030 * to transcoder A after disabling it to allow the 2031 * matching DP port to be enabled on transcoder A. 2032 */ 2033 if (HAS_PCH_IBX(dev_priv) && crtc->pipe == PIPE_B) { 2034 /* 2035 * We get CPU/PCH FIFO underruns on the other pipe when 2036 * doing the workaround. Sweep them under the rug. 2037 */ 2038 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, false); 2039 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false); 2040 2041 temp &= ~SDVO_PIPE_SEL_MASK; 2042 temp |= SDVO_ENABLE | SDVO_PIPE_SEL(PIPE_A); 2043 /* 2044 * HW workaround, need to write this twice for issue 2045 * that may result in first write getting masked. 2046 */ 2047 I915_WRITE(intel_hdmi->hdmi_reg, temp); 2048 POSTING_READ(intel_hdmi->hdmi_reg); 2049 I915_WRITE(intel_hdmi->hdmi_reg, temp); 2050 POSTING_READ(intel_hdmi->hdmi_reg); 2051 2052 temp &= ~SDVO_ENABLE; 2053 I915_WRITE(intel_hdmi->hdmi_reg, temp); 2054 POSTING_READ(intel_hdmi->hdmi_reg); 2055 2056 intel_wait_for_vblank_if_active(dev_priv, PIPE_A); 2057 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 2058 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 2059 } 2060 2061 intel_dig_port->set_infoframes(encoder, 2062 false, 2063 old_crtc_state, old_conn_state); 2064 2065 intel_dp_dual_mode_set_tmds_output(intel_hdmi, false); 2066 } 2067 2068 static void g4x_disable_hdmi(struct intel_encoder *encoder, 2069 const struct intel_crtc_state *old_crtc_state, 2070 const struct drm_connector_state *old_conn_state) 2071 { 2072 if (old_crtc_state->has_audio) 2073 intel_audio_codec_disable(encoder, 2074 old_crtc_state, old_conn_state); 2075 2076 intel_disable_hdmi(encoder, old_crtc_state, old_conn_state); 2077 } 2078 2079 static void pch_disable_hdmi(struct intel_encoder *encoder, 2080 const struct intel_crtc_state *old_crtc_state, 2081 const struct drm_connector_state *old_conn_state) 2082 { 2083 if (old_crtc_state->has_audio) 2084 intel_audio_codec_disable(encoder, 2085 old_crtc_state, old_conn_state); 2086 } 2087 2088 static void pch_post_disable_hdmi(struct intel_encoder *encoder, 2089 const struct intel_crtc_state *old_crtc_state, 2090 const struct drm_connector_state *old_conn_state) 2091 { 2092 intel_disable_hdmi(encoder, old_crtc_state, old_conn_state); 2093 } 2094 2095 static int intel_hdmi_source_max_tmds_clock(struct intel_encoder *encoder) 2096 { 2097 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2098 const struct ddi_vbt_port_info *info = 2099 &dev_priv->vbt.ddi_port_info[encoder->port]; 2100 int max_tmds_clock; 2101 2102 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 2103 max_tmds_clock = 594000; 2104 else if (INTEL_GEN(dev_priv) >= 8 || IS_HASWELL(dev_priv)) 2105 max_tmds_clock = 300000; 2106 else if (INTEL_GEN(dev_priv) >= 5) 2107 max_tmds_clock = 225000; 2108 else 2109 max_tmds_clock = 165000; 2110 2111 if (info->max_tmds_clock) 2112 max_tmds_clock = min(max_tmds_clock, info->max_tmds_clock); 2113 2114 return max_tmds_clock; 2115 } 2116 2117 static int hdmi_port_clock_limit(struct intel_hdmi *hdmi, 2118 bool respect_downstream_limits, 2119 bool force_dvi) 2120 { 2121 struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base; 2122 int max_tmds_clock = intel_hdmi_source_max_tmds_clock(encoder); 2123 2124 if (respect_downstream_limits) { 2125 struct intel_connector *connector = hdmi->attached_connector; 2126 const struct drm_display_info *info = &connector->base.display_info; 2127 2128 if (hdmi->dp_dual_mode.max_tmds_clock) 2129 max_tmds_clock = min(max_tmds_clock, 2130 hdmi->dp_dual_mode.max_tmds_clock); 2131 2132 if (info->max_tmds_clock) 2133 max_tmds_clock = min(max_tmds_clock, 2134 info->max_tmds_clock); 2135 else if (!hdmi->has_hdmi_sink || force_dvi) 2136 max_tmds_clock = min(max_tmds_clock, 165000); 2137 } 2138 2139 return max_tmds_clock; 2140 } 2141 2142 static enum drm_mode_status 2143 hdmi_port_clock_valid(struct intel_hdmi *hdmi, 2144 int clock, bool respect_downstream_limits, 2145 bool force_dvi) 2146 { 2147 struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi)); 2148 2149 if (clock < 25000) 2150 return MODE_CLOCK_LOW; 2151 if (clock > hdmi_port_clock_limit(hdmi, respect_downstream_limits, force_dvi)) 2152 return MODE_CLOCK_HIGH; 2153 2154 /* BXT DPLL can't generate 223-240 MHz */ 2155 if (IS_GEN9_LP(dev_priv) && clock > 223333 && clock < 240000) 2156 return MODE_CLOCK_RANGE; 2157 2158 /* CHV DPLL can't generate 216-240 MHz */ 2159 if (IS_CHERRYVIEW(dev_priv) && clock > 216000 && clock < 240000) 2160 return MODE_CLOCK_RANGE; 2161 2162 return MODE_OK; 2163 } 2164 2165 static enum drm_mode_status 2166 intel_hdmi_mode_valid(struct drm_connector *connector, 2167 struct drm_display_mode *mode) 2168 { 2169 struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2170 struct drm_device *dev = intel_hdmi_to_dev(hdmi); 2171 struct drm_i915_private *dev_priv = to_i915(dev); 2172 enum drm_mode_status status; 2173 int clock; 2174 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; 2175 bool force_dvi = 2176 READ_ONCE(to_intel_digital_connector_state(connector->state)->force_audio) == HDMI_AUDIO_OFF_DVI; 2177 2178 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) 2179 return MODE_NO_DBLESCAN; 2180 2181 clock = mode->clock; 2182 2183 if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING) 2184 clock *= 2; 2185 2186 if (clock > max_dotclk) 2187 return MODE_CLOCK_HIGH; 2188 2189 if (mode->flags & DRM_MODE_FLAG_DBLCLK) 2190 clock *= 2; 2191 2192 if (drm_mode_is_420_only(&connector->display_info, mode)) 2193 clock /= 2; 2194 2195 /* check if we can do 8bpc */ 2196 status = hdmi_port_clock_valid(hdmi, clock, true, force_dvi); 2197 2198 if (hdmi->has_hdmi_sink && !force_dvi) { 2199 /* if we can't do 8bpc we may still be able to do 12bpc */ 2200 if (status != MODE_OK && !HAS_GMCH(dev_priv)) 2201 status = hdmi_port_clock_valid(hdmi, clock * 3 / 2, 2202 true, force_dvi); 2203 2204 /* if we can't do 8,12bpc we may still be able to do 10bpc */ 2205 if (status != MODE_OK && INTEL_GEN(dev_priv) >= 11) 2206 status = hdmi_port_clock_valid(hdmi, clock * 5 / 4, 2207 true, force_dvi); 2208 } 2209 if (status != MODE_OK) 2210 return status; 2211 2212 return intel_mode_valid_max_plane_size(dev_priv, mode); 2213 } 2214 2215 static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state, 2216 int bpc) 2217 { 2218 struct drm_i915_private *dev_priv = 2219 to_i915(crtc_state->uapi.crtc->dev); 2220 struct drm_atomic_state *state = crtc_state->uapi.state; 2221 struct drm_connector_state *connector_state; 2222 struct drm_connector *connector; 2223 const struct drm_display_mode *adjusted_mode = 2224 &crtc_state->hw.adjusted_mode; 2225 int i; 2226 2227 if (HAS_GMCH(dev_priv)) 2228 return false; 2229 2230 if (bpc == 10 && INTEL_GEN(dev_priv) < 11) 2231 return false; 2232 2233 if (crtc_state->pipe_bpp < bpc * 3) 2234 return false; 2235 2236 if (!crtc_state->has_hdmi_sink) 2237 return false; 2238 2239 /* 2240 * HDMI deep color affects the clocks, so it's only possible 2241 * when not cloning with other encoder types. 2242 */ 2243 if (crtc_state->output_types != 1 << INTEL_OUTPUT_HDMI) 2244 return false; 2245 2246 for_each_new_connector_in_state(state, connector, connector_state, i) { 2247 const struct drm_display_info *info = &connector->display_info; 2248 2249 if (connector_state->crtc != crtc_state->uapi.crtc) 2250 continue; 2251 2252 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) { 2253 const struct drm_hdmi_info *hdmi = &info->hdmi; 2254 2255 if (bpc == 12 && !(hdmi->y420_dc_modes & 2256 DRM_EDID_YCBCR420_DC_36)) 2257 return false; 2258 else if (bpc == 10 && !(hdmi->y420_dc_modes & 2259 DRM_EDID_YCBCR420_DC_30)) 2260 return false; 2261 } else { 2262 if (bpc == 12 && !(info->edid_hdmi_dc_modes & 2263 DRM_EDID_HDMI_DC_36)) 2264 return false; 2265 else if (bpc == 10 && !(info->edid_hdmi_dc_modes & 2266 DRM_EDID_HDMI_DC_30)) 2267 return false; 2268 } 2269 } 2270 2271 /* Display WA #1139: glk */ 2272 if (bpc == 12 && IS_GLK_REVID(dev_priv, 0, GLK_REVID_A1) && 2273 adjusted_mode->htotal > 5460) 2274 return false; 2275 2276 /* Display Wa_1405510057:icl */ 2277 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 && 2278 bpc == 10 && INTEL_GEN(dev_priv) >= 11 && 2279 (adjusted_mode->crtc_hblank_end - 2280 adjusted_mode->crtc_hblank_start) % 8 == 2) 2281 return false; 2282 2283 return true; 2284 } 2285 2286 static bool 2287 intel_hdmi_ycbcr420_config(struct drm_connector *connector, 2288 struct intel_crtc_state *config) 2289 { 2290 struct intel_crtc *intel_crtc = to_intel_crtc(config->uapi.crtc); 2291 2292 if (!connector->ycbcr_420_allowed) { 2293 DRM_ERROR("Platform doesn't support YCBCR420 output\n"); 2294 return false; 2295 } 2296 2297 config->output_format = INTEL_OUTPUT_FORMAT_YCBCR420; 2298 2299 /* YCBCR 420 output conversion needs a scaler */ 2300 if (skl_update_scaler_crtc(config)) { 2301 DRM_DEBUG_KMS("Scaler allocation for output failed\n"); 2302 return false; 2303 } 2304 2305 intel_pch_panel_fitting(intel_crtc, config, 2306 DRM_MODE_SCALE_FULLSCREEN); 2307 2308 return true; 2309 } 2310 2311 static int intel_hdmi_port_clock(int clock, int bpc) 2312 { 2313 /* 2314 * Need to adjust the port link by: 2315 * 1.5x for 12bpc 2316 * 1.25x for 10bpc 2317 */ 2318 return clock * bpc / 8; 2319 } 2320 2321 static int intel_hdmi_compute_bpc(struct intel_encoder *encoder, 2322 struct intel_crtc_state *crtc_state, 2323 int clock, bool force_dvi) 2324 { 2325 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 2326 int bpc; 2327 2328 for (bpc = 12; bpc >= 10; bpc -= 2) { 2329 if (hdmi_deep_color_possible(crtc_state, bpc) && 2330 hdmi_port_clock_valid(intel_hdmi, 2331 intel_hdmi_port_clock(clock, bpc), 2332 true, force_dvi) == MODE_OK) 2333 return bpc; 2334 } 2335 2336 return 8; 2337 } 2338 2339 static int intel_hdmi_compute_clock(struct intel_encoder *encoder, 2340 struct intel_crtc_state *crtc_state, 2341 bool force_dvi) 2342 { 2343 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 2344 const struct drm_display_mode *adjusted_mode = 2345 &crtc_state->hw.adjusted_mode; 2346 int bpc, clock = adjusted_mode->crtc_clock; 2347 2348 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) 2349 clock *= 2; 2350 2351 /* YCBCR420 TMDS rate requirement is half the pixel clock */ 2352 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) 2353 clock /= 2; 2354 2355 bpc = intel_hdmi_compute_bpc(encoder, crtc_state, 2356 clock, force_dvi); 2357 2358 crtc_state->port_clock = intel_hdmi_port_clock(clock, bpc); 2359 2360 /* 2361 * pipe_bpp could already be below 8bpc due to 2362 * FDI bandwidth constraints. We shouldn't bump it 2363 * back up to 8bpc in that case. 2364 */ 2365 if (crtc_state->pipe_bpp > bpc * 3) 2366 crtc_state->pipe_bpp = bpc * 3; 2367 2368 DRM_DEBUG_KMS("picking %d bpc for HDMI output (pipe bpp: %d)\n", 2369 bpc, crtc_state->pipe_bpp); 2370 2371 if (hdmi_port_clock_valid(intel_hdmi, crtc_state->port_clock, 2372 false, force_dvi) != MODE_OK) { 2373 DRM_DEBUG_KMS("unsupported HDMI clock (%d kHz), rejecting mode\n", 2374 crtc_state->port_clock); 2375 return -EINVAL; 2376 } 2377 2378 return 0; 2379 } 2380 2381 static bool intel_hdmi_limited_color_range(const struct intel_crtc_state *crtc_state, 2382 const struct drm_connector_state *conn_state) 2383 { 2384 const struct intel_digital_connector_state *intel_conn_state = 2385 const_container_of(conn_state, 2386 struct intel_digital_connector_state, base); 2387 const struct drm_display_mode *adjusted_mode = 2388 &crtc_state->hw.adjusted_mode; 2389 2390 /* 2391 * Our YCbCr output is always limited range. 2392 * crtc_state->limited_color_range only applies to RGB, 2393 * and it must never be set for YCbCr or we risk setting 2394 * some conflicting bits in PIPECONF which will mess up 2395 * the colors on the monitor. 2396 */ 2397 if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB) 2398 return false; 2399 2400 if (intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_AUTO) { 2401 /* See CEA-861-E - 5.1 Default Encoding Parameters */ 2402 return crtc_state->has_hdmi_sink && 2403 drm_default_rgb_quant_range(adjusted_mode) == 2404 HDMI_QUANTIZATION_RANGE_LIMITED; 2405 } else { 2406 return intel_conn_state->broadcast_rgb == INTEL_BROADCAST_RGB_LIMITED; 2407 } 2408 } 2409 2410 int intel_hdmi_compute_config(struct intel_encoder *encoder, 2411 struct intel_crtc_state *pipe_config, 2412 struct drm_connector_state *conn_state) 2413 { 2414 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 2415 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2416 struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; 2417 struct drm_connector *connector = conn_state->connector; 2418 struct drm_scdc *scdc = &connector->display_info.hdmi.scdc; 2419 struct intel_digital_connector_state *intel_conn_state = 2420 to_intel_digital_connector_state(conn_state); 2421 bool force_dvi = intel_conn_state->force_audio == HDMI_AUDIO_OFF_DVI; 2422 int ret; 2423 2424 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) 2425 return -EINVAL; 2426 2427 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 2428 pipe_config->has_hdmi_sink = !force_dvi && intel_hdmi->has_hdmi_sink; 2429 2430 if (pipe_config->has_hdmi_sink) 2431 pipe_config->has_infoframe = true; 2432 2433 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) 2434 pipe_config->pixel_multiplier = 2; 2435 2436 if (drm_mode_is_420_only(&connector->display_info, adjusted_mode)) { 2437 if (!intel_hdmi_ycbcr420_config(connector, pipe_config)) { 2438 DRM_ERROR("Can't support YCBCR420 output\n"); 2439 return -EINVAL; 2440 } 2441 } 2442 2443 pipe_config->limited_color_range = 2444 intel_hdmi_limited_color_range(pipe_config, conn_state); 2445 2446 if (HAS_PCH_SPLIT(dev_priv) && !HAS_DDI(dev_priv)) 2447 pipe_config->has_pch_encoder = true; 2448 2449 if (pipe_config->has_hdmi_sink) { 2450 if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO) 2451 pipe_config->has_audio = intel_hdmi->has_audio; 2452 else 2453 pipe_config->has_audio = 2454 intel_conn_state->force_audio == HDMI_AUDIO_ON; 2455 } 2456 2457 ret = intel_hdmi_compute_clock(encoder, pipe_config, force_dvi); 2458 if (ret) 2459 return ret; 2460 2461 if (conn_state->picture_aspect_ratio) 2462 adjusted_mode->picture_aspect_ratio = 2463 conn_state->picture_aspect_ratio; 2464 2465 pipe_config->lane_count = 4; 2466 2467 if (scdc->scrambling.supported && (INTEL_GEN(dev_priv) >= 10 || 2468 IS_GEMINILAKE(dev_priv))) { 2469 if (scdc->scrambling.low_rates) 2470 pipe_config->hdmi_scrambling = true; 2471 2472 if (pipe_config->port_clock > 340000) { 2473 pipe_config->hdmi_scrambling = true; 2474 pipe_config->hdmi_high_tmds_clock_ratio = true; 2475 } 2476 } 2477 2478 intel_hdmi_compute_gcp_infoframe(encoder, pipe_config, conn_state); 2479 2480 if (!intel_hdmi_compute_avi_infoframe(encoder, pipe_config, conn_state)) { 2481 DRM_DEBUG_KMS("bad AVI infoframe\n"); 2482 return -EINVAL; 2483 } 2484 2485 if (!intel_hdmi_compute_spd_infoframe(encoder, pipe_config, conn_state)) { 2486 DRM_DEBUG_KMS("bad SPD infoframe\n"); 2487 return -EINVAL; 2488 } 2489 2490 if (!intel_hdmi_compute_hdmi_infoframe(encoder, pipe_config, conn_state)) { 2491 DRM_DEBUG_KMS("bad HDMI infoframe\n"); 2492 return -EINVAL; 2493 } 2494 2495 if (!intel_hdmi_compute_drm_infoframe(encoder, pipe_config, conn_state)) { 2496 DRM_DEBUG_KMS("bad DRM infoframe\n"); 2497 return -EINVAL; 2498 } 2499 2500 return 0; 2501 } 2502 2503 static void 2504 intel_hdmi_unset_edid(struct drm_connector *connector) 2505 { 2506 struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2507 2508 intel_hdmi->has_hdmi_sink = false; 2509 intel_hdmi->has_audio = false; 2510 2511 intel_hdmi->dp_dual_mode.type = DRM_DP_DUAL_MODE_NONE; 2512 intel_hdmi->dp_dual_mode.max_tmds_clock = 0; 2513 2514 kfree(to_intel_connector(connector)->detect_edid); 2515 to_intel_connector(connector)->detect_edid = NULL; 2516 } 2517 2518 static void 2519 intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) 2520 { 2521 struct drm_i915_private *dev_priv = to_i915(connector->dev); 2522 struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2523 enum port port = hdmi_to_dig_port(hdmi)->base.port; 2524 struct i2c_adapter *adapter = 2525 intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); 2526 enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(adapter); 2527 2528 /* 2529 * Type 1 DVI adaptors are not required to implement any 2530 * registers, so we can't always detect their presence. 2531 * Ideally we should be able to check the state of the 2532 * CONFIG1 pin, but no such luck on our hardware. 2533 * 2534 * The only method left to us is to check the VBT to see 2535 * if the port is a dual mode capable DP port. But let's 2536 * only do that when we sucesfully read the EDID, to avoid 2537 * confusing log messages about DP dual mode adaptors when 2538 * there's nothing connected to the port. 2539 */ 2540 if (type == DRM_DP_DUAL_MODE_UNKNOWN) { 2541 /* An overridden EDID imply that we want this port for testing. 2542 * Make sure not to set limits for that port. 2543 */ 2544 if (has_edid && !connector->override_edid && 2545 intel_bios_is_port_dp_dual_mode(dev_priv, port)) { 2546 DRM_DEBUG_KMS("Assuming DP dual mode adaptor presence based on VBT\n"); 2547 type = DRM_DP_DUAL_MODE_TYPE1_DVI; 2548 } else { 2549 type = DRM_DP_DUAL_MODE_NONE; 2550 } 2551 } 2552 2553 if (type == DRM_DP_DUAL_MODE_NONE) 2554 return; 2555 2556 hdmi->dp_dual_mode.type = type; 2557 hdmi->dp_dual_mode.max_tmds_clock = 2558 drm_dp_dual_mode_max_tmds_clock(type, adapter); 2559 2560 DRM_DEBUG_KMS("DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n", 2561 drm_dp_get_dual_mode_type_name(type), 2562 hdmi->dp_dual_mode.max_tmds_clock); 2563 } 2564 2565 static bool 2566 intel_hdmi_set_edid(struct drm_connector *connector) 2567 { 2568 struct drm_i915_private *dev_priv = to_i915(connector->dev); 2569 struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2570 intel_wakeref_t wakeref; 2571 struct edid *edid; 2572 bool connected = false; 2573 struct i2c_adapter *i2c; 2574 2575 wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS); 2576 2577 i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus); 2578 2579 edid = drm_get_edid(connector, i2c); 2580 2581 if (!edid && !intel_gmbus_is_forced_bit(i2c)) { 2582 DRM_DEBUG_KMS("HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n"); 2583 intel_gmbus_force_bit(i2c, true); 2584 edid = drm_get_edid(connector, i2c); 2585 intel_gmbus_force_bit(i2c, false); 2586 } 2587 2588 intel_hdmi_dp_dual_mode_detect(connector, edid != NULL); 2589 2590 intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS, wakeref); 2591 2592 to_intel_connector(connector)->detect_edid = edid; 2593 if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) { 2594 intel_hdmi->has_audio = drm_detect_monitor_audio(edid); 2595 intel_hdmi->has_hdmi_sink = drm_detect_hdmi_monitor(edid); 2596 2597 connected = true; 2598 } 2599 2600 cec_notifier_set_phys_addr_from_edid(intel_hdmi->cec_notifier, edid); 2601 2602 return connected; 2603 } 2604 2605 static enum drm_connector_status 2606 intel_hdmi_detect(struct drm_connector *connector, bool force) 2607 { 2608 enum drm_connector_status status = connector_status_disconnected; 2609 struct drm_i915_private *dev_priv = to_i915(connector->dev); 2610 struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2611 struct intel_encoder *encoder = &hdmi_to_dig_port(intel_hdmi)->base; 2612 intel_wakeref_t wakeref; 2613 2614 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 2615 connector->base.id, connector->name); 2616 2617 wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS); 2618 2619 if (INTEL_GEN(dev_priv) >= 11 && 2620 !intel_digital_port_connected(encoder)) 2621 goto out; 2622 2623 intel_hdmi_unset_edid(connector); 2624 2625 if (intel_hdmi_set_edid(connector)) 2626 status = connector_status_connected; 2627 2628 out: 2629 intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS, wakeref); 2630 2631 if (status != connector_status_connected) 2632 cec_notifier_phys_addr_invalidate(intel_hdmi->cec_notifier); 2633 2634 /* 2635 * Make sure the refs for power wells enabled during detect are 2636 * dropped to avoid a new detect cycle triggered by HPD polling. 2637 */ 2638 intel_display_power_flush_work(dev_priv); 2639 2640 return status; 2641 } 2642 2643 static void 2644 intel_hdmi_force(struct drm_connector *connector) 2645 { 2646 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 2647 connector->base.id, connector->name); 2648 2649 intel_hdmi_unset_edid(connector); 2650 2651 if (connector->status != connector_status_connected) 2652 return; 2653 2654 intel_hdmi_set_edid(connector); 2655 } 2656 2657 static int intel_hdmi_get_modes(struct drm_connector *connector) 2658 { 2659 struct edid *edid; 2660 2661 edid = to_intel_connector(connector)->detect_edid; 2662 if (edid == NULL) 2663 return 0; 2664 2665 return intel_connector_update_modes(connector, edid); 2666 } 2667 2668 static void intel_hdmi_pre_enable(struct intel_encoder *encoder, 2669 const struct intel_crtc_state *pipe_config, 2670 const struct drm_connector_state *conn_state) 2671 { 2672 struct intel_digital_port *intel_dig_port = 2673 enc_to_dig_port(encoder); 2674 2675 intel_hdmi_prepare(encoder, pipe_config); 2676 2677 intel_dig_port->set_infoframes(encoder, 2678 pipe_config->has_infoframe, 2679 pipe_config, conn_state); 2680 } 2681 2682 static void vlv_hdmi_pre_enable(struct intel_encoder *encoder, 2683 const struct intel_crtc_state *pipe_config, 2684 const struct drm_connector_state *conn_state) 2685 { 2686 struct intel_digital_port *dport = enc_to_dig_port(encoder); 2687 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2688 2689 vlv_phy_pre_encoder_enable(encoder, pipe_config); 2690 2691 /* HDMI 1.0V-2dB */ 2692 vlv_set_phy_signal_level(encoder, 0x2b245f5f, 0x00002000, 0x5578b83a, 2693 0x2b247878); 2694 2695 dport->set_infoframes(encoder, 2696 pipe_config->has_infoframe, 2697 pipe_config, conn_state); 2698 2699 g4x_enable_hdmi(encoder, pipe_config, conn_state); 2700 2701 vlv_wait_port_ready(dev_priv, dport, 0x0); 2702 } 2703 2704 static void vlv_hdmi_pre_pll_enable(struct intel_encoder *encoder, 2705 const struct intel_crtc_state *pipe_config, 2706 const struct drm_connector_state *conn_state) 2707 { 2708 intel_hdmi_prepare(encoder, pipe_config); 2709 2710 vlv_phy_pre_pll_enable(encoder, pipe_config); 2711 } 2712 2713 static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder, 2714 const struct intel_crtc_state *pipe_config, 2715 const struct drm_connector_state *conn_state) 2716 { 2717 intel_hdmi_prepare(encoder, pipe_config); 2718 2719 chv_phy_pre_pll_enable(encoder, pipe_config); 2720 } 2721 2722 static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder, 2723 const struct intel_crtc_state *old_crtc_state, 2724 const struct drm_connector_state *old_conn_state) 2725 { 2726 chv_phy_post_pll_disable(encoder, old_crtc_state); 2727 } 2728 2729 static void vlv_hdmi_post_disable(struct intel_encoder *encoder, 2730 const struct intel_crtc_state *old_crtc_state, 2731 const struct drm_connector_state *old_conn_state) 2732 { 2733 /* Reset lanes to avoid HDMI flicker (VLV w/a) */ 2734 vlv_phy_reset_lanes(encoder, old_crtc_state); 2735 } 2736 2737 static void chv_hdmi_post_disable(struct intel_encoder *encoder, 2738 const struct intel_crtc_state *old_crtc_state, 2739 const struct drm_connector_state *old_conn_state) 2740 { 2741 struct drm_device *dev = encoder->base.dev; 2742 struct drm_i915_private *dev_priv = to_i915(dev); 2743 2744 vlv_dpio_get(dev_priv); 2745 2746 /* Assert data lane reset */ 2747 chv_data_lane_soft_reset(encoder, old_crtc_state, true); 2748 2749 vlv_dpio_put(dev_priv); 2750 } 2751 2752 static void chv_hdmi_pre_enable(struct intel_encoder *encoder, 2753 const struct intel_crtc_state *pipe_config, 2754 const struct drm_connector_state *conn_state) 2755 { 2756 struct intel_digital_port *dport = enc_to_dig_port(encoder); 2757 struct drm_device *dev = encoder->base.dev; 2758 struct drm_i915_private *dev_priv = to_i915(dev); 2759 2760 chv_phy_pre_encoder_enable(encoder, pipe_config); 2761 2762 /* FIXME: Program the support xxx V-dB */ 2763 /* Use 800mV-0dB */ 2764 chv_set_phy_signal_level(encoder, 128, 102, false); 2765 2766 dport->set_infoframes(encoder, 2767 pipe_config->has_infoframe, 2768 pipe_config, conn_state); 2769 2770 g4x_enable_hdmi(encoder, pipe_config, conn_state); 2771 2772 vlv_wait_port_ready(dev_priv, dport, 0x0); 2773 2774 /* Second common lane will stay alive on its own now */ 2775 chv_phy_release_cl2_override(encoder); 2776 } 2777 2778 #ifndef __NetBSD__ 2779 static struct i2c_adapter * 2780 intel_hdmi_get_i2c_adapter(struct drm_connector *connector) 2781 { 2782 struct drm_i915_private *dev_priv = to_i915(connector->dev); 2783 struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector)); 2784 2785 return intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus); 2786 } 2787 #endif 2788 2789 static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector) 2790 { 2791 #ifndef __NetBSD__ /* XXX i915 hdmi sysfs */ 2792 struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector); 2793 struct kobject *i2c_kobj = &adapter->dev.kobj; 2794 struct kobject *connector_kobj = &connector->kdev->kobj; 2795 int ret; 2796 2797 ret = sysfs_create_link(connector_kobj, i2c_kobj, i2c_kobj->name); 2798 if (ret) 2799 DRM_ERROR("Failed to create i2c symlink (%d)\n", ret); 2800 #endif 2801 } 2802 2803 static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector) 2804 { 2805 #ifndef __NetBSD__ /* XXX i915 hdmi sysfs */ 2806 struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector); 2807 struct kobject *i2c_kobj = &adapter->dev.kobj; 2808 struct kobject *connector_kobj = &connector->kdev->kobj; 2809 2810 sysfs_remove_link(connector_kobj, i2c_kobj->name); 2811 #endif 2812 } 2813 2814 static int 2815 intel_hdmi_connector_register(struct drm_connector *connector) 2816 { 2817 int ret; 2818 2819 ret = intel_connector_register(connector); 2820 if (ret) 2821 return ret; 2822 2823 i915_debugfs_connector_add(connector); 2824 2825 intel_hdmi_create_i2c_symlink(connector); 2826 2827 return ret; 2828 } 2829 2830 static void intel_hdmi_destroy(struct drm_connector *connector) 2831 { 2832 struct cec_notifier *n = intel_attached_hdmi(to_intel_connector(connector))->cec_notifier; 2833 2834 cec_notifier_conn_unregister(n); 2835 2836 intel_connector_destroy(connector); 2837 } 2838 2839 static void intel_hdmi_connector_unregister(struct drm_connector *connector) 2840 { 2841 intel_hdmi_remove_i2c_symlink(connector); 2842 2843 intel_connector_unregister(connector); 2844 } 2845 2846 static const struct drm_connector_funcs intel_hdmi_connector_funcs = { 2847 .detect = intel_hdmi_detect, 2848 .force = intel_hdmi_force, 2849 .fill_modes = drm_helper_probe_single_connector_modes, 2850 .atomic_get_property = intel_digital_connector_atomic_get_property, 2851 .atomic_set_property = intel_digital_connector_atomic_set_property, 2852 .late_register = intel_hdmi_connector_register, 2853 .early_unregister = intel_hdmi_connector_unregister, 2854 .destroy = intel_hdmi_destroy, 2855 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 2856 .atomic_duplicate_state = intel_digital_connector_duplicate_state, 2857 }; 2858 2859 static const struct drm_connector_helper_funcs intel_hdmi_connector_helper_funcs = { 2860 .get_modes = intel_hdmi_get_modes, 2861 .mode_valid = intel_hdmi_mode_valid, 2862 .atomic_check = intel_digital_connector_atomic_check, 2863 }; 2864 2865 static const struct drm_encoder_funcs intel_hdmi_enc_funcs = { 2866 .destroy = intel_encoder_destroy, 2867 }; 2868 2869 static void 2870 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector) 2871 { 2872 struct drm_i915_private *dev_priv = to_i915(connector->dev); 2873 struct intel_digital_port *intel_dig_port = 2874 hdmi_to_dig_port(intel_hdmi); 2875 2876 intel_attach_force_audio_property(connector); 2877 intel_attach_broadcast_rgb_property(connector); 2878 intel_attach_aspect_ratio_property(connector); 2879 2880 /* 2881 * Attach Colorspace property for Non LSPCON based device 2882 * ToDo: This needs to be extended for LSPCON implementation 2883 * as well. Will be implemented separately. 2884 */ 2885 if (!intel_dig_port->lspcon.active) 2886 intel_attach_colorspace_property(connector); 2887 2888 drm_connector_attach_content_type_property(connector); 2889 2890 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 2891 drm_object_attach_property(&connector->base, 2892 connector->dev->mode_config.hdr_output_metadata_property, 0); 2893 2894 if (!HAS_GMCH(dev_priv)) 2895 drm_connector_attach_max_bpc_property(connector, 8, 12); 2896 } 2897 2898 /* 2899 * intel_hdmi_handle_sink_scrambling: handle sink scrambling/clock ratio setup 2900 * @encoder: intel_encoder 2901 * @connector: drm_connector 2902 * @high_tmds_clock_ratio = bool to indicate if the function needs to set 2903 * or reset the high tmds clock ratio for scrambling 2904 * @scrambling: bool to Indicate if the function needs to set or reset 2905 * sink scrambling 2906 * 2907 * This function handles scrambling on HDMI 2.0 capable sinks. 2908 * If required clock rate is > 340 Mhz && scrambling is supported by sink 2909 * it enables scrambling. This should be called before enabling the HDMI 2910 * 2.0 port, as the sink can choose to disable the scrambling if it doesn't 2911 * detect a scrambled clock within 100 ms. 2912 * 2913 * Returns: 2914 * True on success, false on failure. 2915 */ 2916 bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, 2917 struct drm_connector *connector, 2918 bool high_tmds_clock_ratio, 2919 bool scrambling) 2920 { 2921 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 2922 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); 2923 struct drm_scrambling *sink_scrambling = 2924 &connector->display_info.hdmi.scdc.scrambling; 2925 struct i2c_adapter *adapter = 2926 intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus); 2927 2928 if (!sink_scrambling->supported) 2929 return true; 2930 2931 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] scrambling=%s, TMDS bit clock ratio=1/%d\n", 2932 connector->base.id, connector->name, 2933 yesno(scrambling), high_tmds_clock_ratio ? 40 : 10); 2934 2935 /* Set TMDS bit clock ratio to 1/40 or 1/10, and enable/disable scrambling */ 2936 return drm_scdc_set_high_tmds_clock_ratio(adapter, 2937 high_tmds_clock_ratio) && 2938 drm_scdc_set_scrambling(adapter, scrambling); 2939 } 2940 2941 static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) 2942 { 2943 u8 ddc_pin; 2944 2945 switch (port) { 2946 case PORT_B: 2947 ddc_pin = GMBUS_PIN_DPB; 2948 break; 2949 case PORT_C: 2950 ddc_pin = GMBUS_PIN_DPC; 2951 break; 2952 case PORT_D: 2953 ddc_pin = GMBUS_PIN_DPD_CHV; 2954 break; 2955 default: 2956 MISSING_CASE(port); 2957 ddc_pin = GMBUS_PIN_DPB; 2958 break; 2959 } 2960 return ddc_pin; 2961 } 2962 2963 static u8 bxt_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) 2964 { 2965 u8 ddc_pin; 2966 2967 switch (port) { 2968 case PORT_B: 2969 ddc_pin = GMBUS_PIN_1_BXT; 2970 break; 2971 case PORT_C: 2972 ddc_pin = GMBUS_PIN_2_BXT; 2973 break; 2974 default: 2975 MISSING_CASE(port); 2976 ddc_pin = GMBUS_PIN_1_BXT; 2977 break; 2978 } 2979 return ddc_pin; 2980 } 2981 2982 static u8 cnp_port_to_ddc_pin(struct drm_i915_private *dev_priv, 2983 enum port port) 2984 { 2985 u8 ddc_pin; 2986 2987 switch (port) { 2988 case PORT_B: 2989 ddc_pin = GMBUS_PIN_1_BXT; 2990 break; 2991 case PORT_C: 2992 ddc_pin = GMBUS_PIN_2_BXT; 2993 break; 2994 case PORT_D: 2995 ddc_pin = GMBUS_PIN_4_CNP; 2996 break; 2997 case PORT_F: 2998 ddc_pin = GMBUS_PIN_3_BXT; 2999 break; 3000 default: 3001 MISSING_CASE(port); 3002 ddc_pin = GMBUS_PIN_1_BXT; 3003 break; 3004 } 3005 return ddc_pin; 3006 } 3007 3008 static u8 icl_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) 3009 { 3010 enum phy phy = intel_port_to_phy(dev_priv, port); 3011 3012 if (intel_phy_is_combo(dev_priv, phy)) 3013 return GMBUS_PIN_1_BXT + port; 3014 else if (intel_phy_is_tc(dev_priv, phy)) 3015 return GMBUS_PIN_9_TC1_ICP + intel_port_to_tc(dev_priv, port); 3016 3017 WARN(1, "Unknown port:%c\n", port_name(port)); 3018 return GMBUS_PIN_2_BXT; 3019 } 3020 3021 static u8 mcc_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) 3022 { 3023 enum phy phy = intel_port_to_phy(dev_priv, port); 3024 u8 ddc_pin; 3025 3026 switch (phy) { 3027 case PHY_A: 3028 ddc_pin = GMBUS_PIN_1_BXT; 3029 break; 3030 case PHY_B: 3031 ddc_pin = GMBUS_PIN_2_BXT; 3032 break; 3033 case PHY_C: 3034 ddc_pin = GMBUS_PIN_9_TC1_ICP; 3035 break; 3036 default: 3037 MISSING_CASE(phy); 3038 ddc_pin = GMBUS_PIN_1_BXT; 3039 break; 3040 } 3041 return ddc_pin; 3042 } 3043 3044 static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv, 3045 enum port port) 3046 { 3047 u8 ddc_pin; 3048 3049 switch (port) { 3050 case PORT_B: 3051 ddc_pin = GMBUS_PIN_DPB; 3052 break; 3053 case PORT_C: 3054 ddc_pin = GMBUS_PIN_DPC; 3055 break; 3056 case PORT_D: 3057 ddc_pin = GMBUS_PIN_DPD; 3058 break; 3059 default: 3060 MISSING_CASE(port); 3061 ddc_pin = GMBUS_PIN_DPB; 3062 break; 3063 } 3064 return ddc_pin; 3065 } 3066 3067 static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, 3068 enum port port) 3069 { 3070 const struct ddi_vbt_port_info *info = 3071 &dev_priv->vbt.ddi_port_info[port]; 3072 u8 ddc_pin; 3073 3074 if (info->alternate_ddc_pin) { 3075 DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", 3076 info->alternate_ddc_pin, port_name(port)); 3077 return info->alternate_ddc_pin; 3078 } 3079 3080 if (HAS_PCH_MCC(dev_priv)) 3081 ddc_pin = mcc_port_to_ddc_pin(dev_priv, port); 3082 else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP) 3083 ddc_pin = icl_port_to_ddc_pin(dev_priv, port); 3084 else if (HAS_PCH_CNP(dev_priv)) 3085 ddc_pin = cnp_port_to_ddc_pin(dev_priv, port); 3086 else if (IS_GEN9_LP(dev_priv)) 3087 ddc_pin = bxt_port_to_ddc_pin(dev_priv, port); 3088 else if (IS_CHERRYVIEW(dev_priv)) 3089 ddc_pin = chv_port_to_ddc_pin(dev_priv, port); 3090 else 3091 ddc_pin = g4x_port_to_ddc_pin(dev_priv, port); 3092 3093 DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n", 3094 ddc_pin, port_name(port)); 3095 3096 return ddc_pin; 3097 } 3098 3099 void intel_infoframe_init(struct intel_digital_port *intel_dig_port) 3100 { 3101 struct drm_i915_private *dev_priv = 3102 to_i915(intel_dig_port->base.base.dev); 3103 3104 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 3105 intel_dig_port->write_infoframe = vlv_write_infoframe; 3106 intel_dig_port->read_infoframe = vlv_read_infoframe; 3107 intel_dig_port->set_infoframes = vlv_set_infoframes; 3108 intel_dig_port->infoframes_enabled = vlv_infoframes_enabled; 3109 } else if (IS_G4X(dev_priv)) { 3110 intel_dig_port->write_infoframe = g4x_write_infoframe; 3111 intel_dig_port->read_infoframe = g4x_read_infoframe; 3112 intel_dig_port->set_infoframes = g4x_set_infoframes; 3113 intel_dig_port->infoframes_enabled = g4x_infoframes_enabled; 3114 } else if (HAS_DDI(dev_priv)) { 3115 if (intel_dig_port->lspcon.active) { 3116 intel_dig_port->write_infoframe = lspcon_write_infoframe; 3117 intel_dig_port->read_infoframe = lspcon_read_infoframe; 3118 intel_dig_port->set_infoframes = lspcon_set_infoframes; 3119 intel_dig_port->infoframes_enabled = lspcon_infoframes_enabled; 3120 } else { 3121 intel_dig_port->write_infoframe = hsw_write_infoframe; 3122 intel_dig_port->read_infoframe = hsw_read_infoframe; 3123 intel_dig_port->set_infoframes = hsw_set_infoframes; 3124 intel_dig_port->infoframes_enabled = hsw_infoframes_enabled; 3125 } 3126 } else if (HAS_PCH_IBX(dev_priv)) { 3127 intel_dig_port->write_infoframe = ibx_write_infoframe; 3128 intel_dig_port->read_infoframe = ibx_read_infoframe; 3129 intel_dig_port->set_infoframes = ibx_set_infoframes; 3130 intel_dig_port->infoframes_enabled = ibx_infoframes_enabled; 3131 } else { 3132 intel_dig_port->write_infoframe = cpt_write_infoframe; 3133 intel_dig_port->read_infoframe = cpt_read_infoframe; 3134 intel_dig_port->set_infoframes = cpt_set_infoframes; 3135 intel_dig_port->infoframes_enabled = cpt_infoframes_enabled; 3136 } 3137 } 3138 3139 void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, 3140 struct intel_connector *intel_connector) 3141 { 3142 struct drm_connector *connector = &intel_connector->base; 3143 struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi; 3144 struct intel_encoder *intel_encoder = &intel_dig_port->base; 3145 struct drm_device *dev = intel_encoder->base.dev; 3146 struct drm_i915_private *dev_priv = to_i915(dev); 3147 struct i2c_adapter *ddc; 3148 enum port port = intel_encoder->port; 3149 struct cec_connector_info conn_info; 3150 3151 DRM_DEBUG_KMS("Adding HDMI connector on [ENCODER:%d:%s]\n", 3152 intel_encoder->base.base.id, intel_encoder->base.name); 3153 3154 if (INTEL_GEN(dev_priv) < 12 && WARN_ON(port == PORT_A)) 3155 return; 3156 3157 if (WARN(intel_dig_port->max_lanes < 4, 3158 "Not enough lanes (%d) for HDMI on [ENCODER:%d:%s]\n", 3159 intel_dig_port->max_lanes, intel_encoder->base.base.id, 3160 intel_encoder->base.name)) 3161 return; 3162 3163 intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port); 3164 ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus); 3165 3166 drm_connector_init_with_ddc(dev, connector, 3167 &intel_hdmi_connector_funcs, 3168 DRM_MODE_CONNECTOR_HDMIA, 3169 ddc); 3170 drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs); 3171 3172 connector->interlace_allowed = 1; 3173 connector->doublescan_allowed = 0; 3174 connector->stereo_allowed = 1; 3175 3176 if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) 3177 connector->ycbcr_420_allowed = true; 3178 3179 intel_encoder->hpd_pin = intel_hpd_pin_default(dev_priv, port); 3180 3181 if (HAS_DDI(dev_priv)) 3182 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; 3183 else 3184 intel_connector->get_hw_state = intel_connector_get_hw_state; 3185 3186 intel_hdmi_add_properties(intel_hdmi, connector); 3187 3188 intel_connector_attach_encoder(intel_connector, intel_encoder); 3189 intel_hdmi->attached_connector = intel_connector; 3190 3191 if (is_hdcp_supported(dev_priv, port)) { 3192 int ret = intel_hdcp_init(intel_connector, 3193 &intel_hdmi_hdcp_shim); 3194 if (ret) 3195 DRM_DEBUG_KMS("HDCP init failed, skipping.\n"); 3196 } 3197 3198 /* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written 3199 * 0xd. Failure to do so will result in spurious interrupts being 3200 * generated on the port when a cable is not attached. 3201 */ 3202 if (IS_G45(dev_priv)) { 3203 u32 temp = I915_READ(PEG_BAND_GAP_DATA); 3204 I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd); 3205 } 3206 3207 cec_fill_conn_info_from_drm(&conn_info, connector); 3208 3209 intel_hdmi->cec_notifier = 3210 cec_notifier_conn_register(dev->dev, port_identifier(port), 3211 &conn_info); 3212 if (!intel_hdmi->cec_notifier) 3213 DRM_DEBUG_KMS("CEC notifier get failed\n"); 3214 } 3215 3216 static enum intel_hotplug_state 3217 intel_hdmi_hotplug(struct intel_encoder *encoder, 3218 struct intel_connector *connector, bool irq_received) 3219 { 3220 enum intel_hotplug_state state; 3221 3222 state = intel_encoder_hotplug(encoder, connector, irq_received); 3223 3224 /* 3225 * On many platforms the HDMI live state signal is known to be 3226 * unreliable, so we can't use it to detect if a sink is connected or 3227 * not. Instead we detect if it's connected based on whether we can 3228 * read the EDID or not. That in turn has a problem during disconnect, 3229 * since the HPD interrupt may be raised before the DDC lines get 3230 * disconnected (due to how the required length of DDC vs. HPD 3231 * connector pins are specified) and so we'll still be able to get a 3232 * valid EDID. To solve this schedule another detection cycle if this 3233 * time around we didn't detect any change in the sink's connection 3234 * status. 3235 */ 3236 if (state == INTEL_HOTPLUG_UNCHANGED && irq_received) 3237 state = INTEL_HOTPLUG_RETRY; 3238 3239 return state; 3240 } 3241 3242 void intel_hdmi_init(struct drm_i915_private *dev_priv, 3243 i915_reg_t hdmi_reg, enum port port) 3244 { 3245 struct intel_digital_port *intel_dig_port; 3246 struct intel_encoder *intel_encoder; 3247 struct intel_connector *intel_connector; 3248 3249 intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL); 3250 if (!intel_dig_port) 3251 return; 3252 3253 intel_connector = intel_connector_alloc(); 3254 if (!intel_connector) { 3255 kfree(intel_dig_port); 3256 return; 3257 } 3258 3259 intel_encoder = &intel_dig_port->base; 3260 3261 drm_encoder_init(&dev_priv->drm, &intel_encoder->base, 3262 &intel_hdmi_enc_funcs, DRM_MODE_ENCODER_TMDS, 3263 "HDMI %c", port_name(port)); 3264 3265 intel_encoder->hotplug = intel_hdmi_hotplug; 3266 intel_encoder->compute_config = intel_hdmi_compute_config; 3267 if (HAS_PCH_SPLIT(dev_priv)) { 3268 intel_encoder->disable = pch_disable_hdmi; 3269 intel_encoder->post_disable = pch_post_disable_hdmi; 3270 } else { 3271 intel_encoder->disable = g4x_disable_hdmi; 3272 } 3273 intel_encoder->get_hw_state = intel_hdmi_get_hw_state; 3274 intel_encoder->get_config = intel_hdmi_get_config; 3275 if (IS_CHERRYVIEW(dev_priv)) { 3276 intel_encoder->pre_pll_enable = chv_hdmi_pre_pll_enable; 3277 intel_encoder->pre_enable = chv_hdmi_pre_enable; 3278 intel_encoder->enable = vlv_enable_hdmi; 3279 intel_encoder->post_disable = chv_hdmi_post_disable; 3280 intel_encoder->post_pll_disable = chv_hdmi_post_pll_disable; 3281 } else if (IS_VALLEYVIEW(dev_priv)) { 3282 intel_encoder->pre_pll_enable = vlv_hdmi_pre_pll_enable; 3283 intel_encoder->pre_enable = vlv_hdmi_pre_enable; 3284 intel_encoder->enable = vlv_enable_hdmi; 3285 intel_encoder->post_disable = vlv_hdmi_post_disable; 3286 } else { 3287 intel_encoder->pre_enable = intel_hdmi_pre_enable; 3288 if (HAS_PCH_CPT(dev_priv)) 3289 intel_encoder->enable = cpt_enable_hdmi; 3290 else if (HAS_PCH_IBX(dev_priv)) 3291 intel_encoder->enable = ibx_enable_hdmi; 3292 else 3293 intel_encoder->enable = g4x_enable_hdmi; 3294 } 3295 3296 intel_encoder->type = INTEL_OUTPUT_HDMI; 3297 intel_encoder->power_domain = intel_port_to_power_domain(port); 3298 intel_encoder->port = port; 3299 if (IS_CHERRYVIEW(dev_priv)) { 3300 if (port == PORT_D) 3301 intel_encoder->pipe_mask = BIT(PIPE_C); 3302 else 3303 intel_encoder->pipe_mask = BIT(PIPE_A) | BIT(PIPE_B); 3304 } else { 3305 intel_encoder->pipe_mask = ~0; 3306 } 3307 intel_encoder->cloneable = 1 << INTEL_OUTPUT_ANALOG; 3308 /* 3309 * BSpec is unclear about HDMI+HDMI cloning on g4x, but it seems 3310 * to work on real hardware. And since g4x can send infoframes to 3311 * only one port anyway, nothing is lost by allowing it. 3312 */ 3313 if (IS_G4X(dev_priv)) 3314 intel_encoder->cloneable |= 1 << INTEL_OUTPUT_HDMI; 3315 3316 intel_dig_port->hdmi.hdmi_reg = hdmi_reg; 3317 intel_dig_port->dp.output_reg = INVALID_MMIO_REG; 3318 intel_dig_port->max_lanes = 4; 3319 3320 intel_infoframe_init(intel_dig_port); 3321 3322 intel_dig_port->aux_ch = intel_bios_port_aux_ch(dev_priv, port); 3323 intel_hdmi_init_connector(intel_dig_port, intel_connector); 3324 } 3325