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