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