Linux Audio

Check our new training course

Loading...
v4.10.11
   1/*
   2 * Copyright © 2012 Intel Corporation
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the next
  12 * paragraph) shall be included in all copies or substantial portions of the
  13 * Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21 * IN THE SOFTWARE.
  22 *
  23 * Authors:
  24 *    Eugeni Dodonov <eugeni.dodonov@intel.com>
  25 *
  26 */
  27
  28#include "i915_drv.h"
  29#include "intel_drv.h"
  30
  31struct ddi_buf_trans {
  32	u32 trans1;	/* balance leg enable, de-emph level */
  33	u32 trans2;	/* vref sel, vswing */
  34	u8 i_boost;	/* SKL: I_boost; valid: 0x0, 0x1, 0x3, 0x7 */
  35};
  36
  37/* HDMI/DVI modes ignore everything but the last 2 items. So we share
  38 * them for both DP and FDI transports, allowing those ports to
  39 * automatically adapt to HDMI connections as well
  40 */
  41static const struct ddi_buf_trans hsw_ddi_translations_dp[] = {
  42	{ 0x00FFFFFF, 0x0006000E, 0x0 },
  43	{ 0x00D75FFF, 0x0005000A, 0x0 },
  44	{ 0x00C30FFF, 0x00040006, 0x0 },
  45	{ 0x80AAAFFF, 0x000B0000, 0x0 },
  46	{ 0x00FFFFFF, 0x0005000A, 0x0 },
  47	{ 0x00D75FFF, 0x000C0004, 0x0 },
  48	{ 0x80C30FFF, 0x000B0000, 0x0 },
  49	{ 0x00FFFFFF, 0x00040006, 0x0 },
  50	{ 0x80D75FFF, 0x000B0000, 0x0 },
  51};
  52
  53static const struct ddi_buf_trans hsw_ddi_translations_fdi[] = {
  54	{ 0x00FFFFFF, 0x0007000E, 0x0 },
  55	{ 0x00D75FFF, 0x000F000A, 0x0 },
  56	{ 0x00C30FFF, 0x00060006, 0x0 },
  57	{ 0x00AAAFFF, 0x001E0000, 0x0 },
  58	{ 0x00FFFFFF, 0x000F000A, 0x0 },
  59	{ 0x00D75FFF, 0x00160004, 0x0 },
  60	{ 0x00C30FFF, 0x001E0000, 0x0 },
  61	{ 0x00FFFFFF, 0x00060006, 0x0 },
  62	{ 0x00D75FFF, 0x001E0000, 0x0 },
  63};
  64
  65static const struct ddi_buf_trans hsw_ddi_translations_hdmi[] = {
  66					/* Idx	NT mV d	T mV d	db	*/
  67	{ 0x00FFFFFF, 0x0006000E, 0x0 },/* 0:	400	400	0	*/
  68	{ 0x00E79FFF, 0x000E000C, 0x0 },/* 1:	400	500	2	*/
  69	{ 0x00D75FFF, 0x0005000A, 0x0 },/* 2:	400	600	3.5	*/
  70	{ 0x00FFFFFF, 0x0005000A, 0x0 },/* 3:	600	600	0	*/
  71	{ 0x00E79FFF, 0x001D0007, 0x0 },/* 4:	600	750	2	*/
  72	{ 0x00D75FFF, 0x000C0004, 0x0 },/* 5:	600	900	3.5	*/
  73	{ 0x00FFFFFF, 0x00040006, 0x0 },/* 6:	800	800	0	*/
  74	{ 0x80E79FFF, 0x00030002, 0x0 },/* 7:	800	1000	2	*/
  75	{ 0x00FFFFFF, 0x00140005, 0x0 },/* 8:	850	850	0	*/
  76	{ 0x00FFFFFF, 0x000C0004, 0x0 },/* 9:	900	900	0	*/
  77	{ 0x00FFFFFF, 0x001C0003, 0x0 },/* 10:	950	950	0	*/
  78	{ 0x80FFFFFF, 0x00030002, 0x0 },/* 11:	1000	1000	0	*/
  79};
  80
  81static const struct ddi_buf_trans bdw_ddi_translations_edp[] = {
  82	{ 0x00FFFFFF, 0x00000012, 0x0 },
  83	{ 0x00EBAFFF, 0x00020011, 0x0 },
  84	{ 0x00C71FFF, 0x0006000F, 0x0 },
  85	{ 0x00AAAFFF, 0x000E000A, 0x0 },
  86	{ 0x00FFFFFF, 0x00020011, 0x0 },
  87	{ 0x00DB6FFF, 0x0005000F, 0x0 },
  88	{ 0x00BEEFFF, 0x000A000C, 0x0 },
  89	{ 0x00FFFFFF, 0x0005000F, 0x0 },
  90	{ 0x00DB6FFF, 0x000A000C, 0x0 },
  91};
  92
  93static const struct ddi_buf_trans bdw_ddi_translations_dp[] = {
  94	{ 0x00FFFFFF, 0x0007000E, 0x0 },
  95	{ 0x00D75FFF, 0x000E000A, 0x0 },
  96	{ 0x00BEFFFF, 0x00140006, 0x0 },
  97	{ 0x80B2CFFF, 0x001B0002, 0x0 },
  98	{ 0x00FFFFFF, 0x000E000A, 0x0 },
  99	{ 0x00DB6FFF, 0x00160005, 0x0 },
 100	{ 0x80C71FFF, 0x001A0002, 0x0 },
 101	{ 0x00F7DFFF, 0x00180004, 0x0 },
 102	{ 0x80D75FFF, 0x001B0002, 0x0 },
 103};
 104
 105static const struct ddi_buf_trans bdw_ddi_translations_fdi[] = {
 106	{ 0x00FFFFFF, 0x0001000E, 0x0 },
 107	{ 0x00D75FFF, 0x0004000A, 0x0 },
 108	{ 0x00C30FFF, 0x00070006, 0x0 },
 109	{ 0x00AAAFFF, 0x000C0000, 0x0 },
 110	{ 0x00FFFFFF, 0x0004000A, 0x0 },
 111	{ 0x00D75FFF, 0x00090004, 0x0 },
 112	{ 0x00C30FFF, 0x000C0000, 0x0 },
 113	{ 0x00FFFFFF, 0x00070006, 0x0 },
 114	{ 0x00D75FFF, 0x000C0000, 0x0 },
 115};
 116
 117static const struct ddi_buf_trans bdw_ddi_translations_hdmi[] = {
 118					/* Idx	NT mV d	T mV df	db	*/
 119	{ 0x00FFFFFF, 0x0007000E, 0x0 },/* 0:	400	400	0	*/
 120	{ 0x00D75FFF, 0x000E000A, 0x0 },/* 1:	400	600	3.5	*/
 121	{ 0x00BEFFFF, 0x00140006, 0x0 },/* 2:	400	800	6	*/
 122	{ 0x00FFFFFF, 0x0009000D, 0x0 },/* 3:	450	450	0	*/
 123	{ 0x00FFFFFF, 0x000E000A, 0x0 },/* 4:	600	600	0	*/
 124	{ 0x00D7FFFF, 0x00140006, 0x0 },/* 5:	600	800	2.5	*/
 125	{ 0x80CB2FFF, 0x001B0002, 0x0 },/* 6:	600	1000	4.5	*/
 126	{ 0x00FFFFFF, 0x00140006, 0x0 },/* 7:	800	800	0	*/
 127	{ 0x80E79FFF, 0x001B0002, 0x0 },/* 8:	800	1000	2	*/
 128	{ 0x80FFFFFF, 0x001B0002, 0x0 },/* 9:	1000	1000	0	*/
 129};
 130
 131/* Skylake H and S */
 132static const struct ddi_buf_trans skl_ddi_translations_dp[] = {
 133	{ 0x00002016, 0x000000A0, 0x0 },
 134	{ 0x00005012, 0x0000009B, 0x0 },
 135	{ 0x00007011, 0x00000088, 0x0 },
 136	{ 0x80009010, 0x000000C0, 0x1 },
 137	{ 0x00002016, 0x0000009B, 0x0 },
 138	{ 0x00005012, 0x00000088, 0x0 },
 139	{ 0x80007011, 0x000000C0, 0x1 },
 140	{ 0x00002016, 0x000000DF, 0x0 },
 141	{ 0x80005012, 0x000000C0, 0x1 },
 142};
 143
 144/* Skylake U */
 145static const struct ddi_buf_trans skl_u_ddi_translations_dp[] = {
 146	{ 0x0000201B, 0x000000A2, 0x0 },
 147	{ 0x00005012, 0x00000088, 0x0 },
 148	{ 0x80007011, 0x000000CD, 0x1 },
 149	{ 0x80009010, 0x000000C0, 0x1 },
 150	{ 0x0000201B, 0x0000009D, 0x0 },
 151	{ 0x80005012, 0x000000C0, 0x1 },
 152	{ 0x80007011, 0x000000C0, 0x1 },
 153	{ 0x00002016, 0x00000088, 0x0 },
 154	{ 0x80005012, 0x000000C0, 0x1 },
 155};
 156
 157/* Skylake Y */
 158static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
 159	{ 0x00000018, 0x000000A2, 0x0 },
 160	{ 0x00005012, 0x00000088, 0x0 },
 161	{ 0x80007011, 0x000000CD, 0x3 },
 162	{ 0x80009010, 0x000000C0, 0x3 },
 163	{ 0x00000018, 0x0000009D, 0x0 },
 164	{ 0x80005012, 0x000000C0, 0x3 },
 165	{ 0x80007011, 0x000000C0, 0x3 },
 166	{ 0x00000018, 0x00000088, 0x0 },
 167	{ 0x80005012, 0x000000C0, 0x3 },
 168};
 169
 170/* Kabylake H and S */
 171static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
 172	{ 0x00002016, 0x000000A0, 0x0 },
 173	{ 0x00005012, 0x0000009B, 0x0 },
 174	{ 0x00007011, 0x00000088, 0x0 },
 175	{ 0x80009010, 0x000000C0, 0x1 },
 176	{ 0x00002016, 0x0000009B, 0x0 },
 177	{ 0x00005012, 0x00000088, 0x0 },
 178	{ 0x80007011, 0x000000C0, 0x1 },
 179	{ 0x00002016, 0x00000097, 0x0 },
 180	{ 0x80005012, 0x000000C0, 0x1 },
 181};
 182
 183/* Kabylake U */
 184static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
 185	{ 0x0000201B, 0x000000A1, 0x0 },
 186	{ 0x00005012, 0x00000088, 0x0 },
 187	{ 0x80007011, 0x000000CD, 0x3 },
 188	{ 0x80009010, 0x000000C0, 0x3 },
 189	{ 0x0000201B, 0x0000009D, 0x0 },
 190	{ 0x80005012, 0x000000C0, 0x3 },
 191	{ 0x80007011, 0x000000C0, 0x3 },
 192	{ 0x00002016, 0x0000004F, 0x0 },
 193	{ 0x80005012, 0x000000C0, 0x3 },
 194};
 195
 196/* Kabylake Y */
 197static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
 198	{ 0x00001017, 0x000000A1, 0x0 },
 199	{ 0x00005012, 0x00000088, 0x0 },
 200	{ 0x80007011, 0x000000CD, 0x3 },
 201	{ 0x8000800F, 0x000000C0, 0x3 },
 202	{ 0x00001017, 0x0000009D, 0x0 },
 203	{ 0x80005012, 0x000000C0, 0x3 },
 204	{ 0x80007011, 0x000000C0, 0x3 },
 205	{ 0x00001017, 0x0000004C, 0x0 },
 206	{ 0x80005012, 0x000000C0, 0x3 },
 207};
 208
 209/*
 210 * Skylake/Kabylake H and S
 211 * eDP 1.4 low vswing translation parameters
 212 */
 213static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
 214	{ 0x00000018, 0x000000A8, 0x0 },
 215	{ 0x00004013, 0x000000A9, 0x0 },
 216	{ 0x00007011, 0x000000A2, 0x0 },
 217	{ 0x00009010, 0x0000009C, 0x0 },
 218	{ 0x00000018, 0x000000A9, 0x0 },
 219	{ 0x00006013, 0x000000A2, 0x0 },
 220	{ 0x00007011, 0x000000A6, 0x0 },
 221	{ 0x00000018, 0x000000AB, 0x0 },
 222	{ 0x00007013, 0x0000009F, 0x0 },
 223	{ 0x00000018, 0x000000DF, 0x0 },
 224};
 225
 226/*
 227 * Skylake/Kabylake U
 228 * eDP 1.4 low vswing translation parameters
 229 */
 230static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
 231	{ 0x00000018, 0x000000A8, 0x0 },
 232	{ 0x00004013, 0x000000A9, 0x0 },
 233	{ 0x00007011, 0x000000A2, 0x0 },
 234	{ 0x00009010, 0x0000009C, 0x0 },
 235	{ 0x00000018, 0x000000A9, 0x0 },
 236	{ 0x00006013, 0x000000A2, 0x0 },
 237	{ 0x00007011, 0x000000A6, 0x0 },
 238	{ 0x00002016, 0x000000AB, 0x0 },
 239	{ 0x00005013, 0x0000009F, 0x0 },
 240	{ 0x00000018, 0x000000DF, 0x0 },
 241};
 242
 243/*
 244 * Skylake/Kabylake Y
 245 * eDP 1.4 low vswing translation parameters
 246 */
 247static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
 248	{ 0x00000018, 0x000000A8, 0x0 },
 249	{ 0x00004013, 0x000000AB, 0x0 },
 250	{ 0x00007011, 0x000000A4, 0x0 },
 251	{ 0x00009010, 0x000000DF, 0x0 },
 252	{ 0x00000018, 0x000000AA, 0x0 },
 253	{ 0x00006013, 0x000000A4, 0x0 },
 254	{ 0x00007011, 0x0000009D, 0x0 },
 255	{ 0x00000018, 0x000000A0, 0x0 },
 256	{ 0x00006012, 0x000000DF, 0x0 },
 257	{ 0x00000018, 0x0000008A, 0x0 },
 258};
 259
 260/* Skylake/Kabylake U, H and S */
 261static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 262	{ 0x00000018, 0x000000AC, 0x0 },
 263	{ 0x00005012, 0x0000009D, 0x0 },
 264	{ 0x00007011, 0x00000088, 0x0 },
 265	{ 0x00000018, 0x000000A1, 0x0 },
 266	{ 0x00000018, 0x00000098, 0x0 },
 267	{ 0x00004013, 0x00000088, 0x0 },
 268	{ 0x80006012, 0x000000CD, 0x1 },
 269	{ 0x00000018, 0x000000DF, 0x0 },
 270	{ 0x80003015, 0x000000CD, 0x1 },	/* Default */
 271	{ 0x80003015, 0x000000C0, 0x1 },
 272	{ 0x80000018, 0x000000C0, 0x1 },
 273};
 274
 275/* Skylake/Kabylake Y */
 276static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
 277	{ 0x00000018, 0x000000A1, 0x0 },
 278	{ 0x00005012, 0x000000DF, 0x0 },
 279	{ 0x80007011, 0x000000CB, 0x3 },
 280	{ 0x00000018, 0x000000A4, 0x0 },
 281	{ 0x00000018, 0x0000009D, 0x0 },
 282	{ 0x00004013, 0x00000080, 0x0 },
 283	{ 0x80006013, 0x000000C0, 0x3 },
 284	{ 0x00000018, 0x0000008A, 0x0 },
 285	{ 0x80003015, 0x000000C0, 0x3 },	/* Default */
 286	{ 0x80003015, 0x000000C0, 0x3 },
 287	{ 0x80000018, 0x000000C0, 0x3 },
 288};
 289
 290struct bxt_ddi_buf_trans {
 291	u32 margin;	/* swing value */
 292	u32 scale;	/* scale value */
 293	u32 enable;	/* scale enable */
 294	u32 deemphasis;
 295	bool default_index; /* true if the entry represents default value */
 296};
 297
 298static const struct bxt_ddi_buf_trans bxt_ddi_translations_dp[] = {
 299					/* Idx	NT mV diff	db  */
 300	{ 52,  0x9A, 0, 128, true  },	/* 0:	400		0   */
 301	{ 78,  0x9A, 0, 85,  false },	/* 1:	400		3.5 */
 302	{ 104, 0x9A, 0, 64,  false },	/* 2:	400		6   */
 303	{ 154, 0x9A, 0, 43,  false },	/* 3:	400		9.5 */
 304	{ 77,  0x9A, 0, 128, false },	/* 4:	600		0   */
 305	{ 116, 0x9A, 0, 85,  false },	/* 5:	600		3.5 */
 306	{ 154, 0x9A, 0, 64,  false },	/* 6:	600		6   */
 307	{ 102, 0x9A, 0, 128, false },	/* 7:	800		0   */
 308	{ 154, 0x9A, 0, 85,  false },	/* 8:	800		3.5 */
 309	{ 154, 0x9A, 1, 128, false },	/* 9:	1200		0   */
 310};
 311
 312static const struct bxt_ddi_buf_trans bxt_ddi_translations_edp[] = {
 313					/* Idx	NT mV diff	db  */
 314	{ 26, 0, 0, 128, false },	/* 0:	200		0   */
 315	{ 38, 0, 0, 112, false },	/* 1:	200		1.5 */
 316	{ 48, 0, 0, 96,  false },	/* 2:	200		4   */
 317	{ 54, 0, 0, 69,  false },	/* 3:	200		6   */
 318	{ 32, 0, 0, 128, false },	/* 4:	250		0   */
 319	{ 48, 0, 0, 104, false },	/* 5:	250		1.5 */
 320	{ 54, 0, 0, 85,  false },	/* 6:	250		4   */
 321	{ 43, 0, 0, 128, false },	/* 7:	300		0   */
 322	{ 54, 0, 0, 101, false },	/* 8:	300		1.5 */
 323	{ 48, 0, 0, 128, false },	/* 9:	300		0   */
 324};
 325
 326/* BSpec has 2 recommended values - entries 0 and 8.
 327 * Using the entry with higher vswing.
 328 */
 329static const struct bxt_ddi_buf_trans bxt_ddi_translations_hdmi[] = {
 330					/* Idx	NT mV diff	db  */
 331	{ 52,  0x9A, 0, 128, false },	/* 0:	400		0   */
 332	{ 52,  0x9A, 0, 85,  false },	/* 1:	400		3.5 */
 333	{ 52,  0x9A, 0, 64,  false },	/* 2:	400		6   */
 334	{ 42,  0x9A, 0, 43,  false },	/* 3:	400		9.5 */
 335	{ 77,  0x9A, 0, 128, false },	/* 4:	600		0   */
 336	{ 77,  0x9A, 0, 85,  false },	/* 5:	600		3.5 */
 337	{ 77,  0x9A, 0, 64,  false },	/* 6:	600		6   */
 338	{ 102, 0x9A, 0, 128, false },	/* 7:	800		0   */
 339	{ 102, 0x9A, 0, 85,  false },	/* 8:	800		3.5 */
 340	{ 154, 0x9A, 1, 128, true },	/* 9:	1200		0   */
 341};
 342
 343enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
 344{
 345	switch (encoder->type) {
 346	case INTEL_OUTPUT_DP_MST:
 347		return enc_to_mst(&encoder->base)->primary->port;
 348	case INTEL_OUTPUT_DP:
 349	case INTEL_OUTPUT_EDP:
 350	case INTEL_OUTPUT_HDMI:
 351	case INTEL_OUTPUT_UNKNOWN:
 352		return enc_to_dig_port(&encoder->base)->port;
 353	case INTEL_OUTPUT_ANALOG:
 354		return PORT_E;
 355	default:
 356		MISSING_CASE(encoder->type);
 357		return PORT_A;
 358	}
 359}
 360
 361static const struct ddi_buf_trans *
 362bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 363{
 364	if (dev_priv->vbt.edp.low_vswing) {
 365		*n_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
 366		return bdw_ddi_translations_edp;
 367	} else {
 368		*n_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
 369		return bdw_ddi_translations_dp;
 370	}
 371}
 372
 373static const struct ddi_buf_trans *
 374skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 375{
 376	if (IS_SKL_ULX(dev_priv)) {
 377		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
 378		return skl_y_ddi_translations_dp;
 379	} else if (IS_SKL_ULT(dev_priv)) {
 380		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
 381		return skl_u_ddi_translations_dp;
 382	} else {
 383		*n_entries = ARRAY_SIZE(skl_ddi_translations_dp);
 384		return skl_ddi_translations_dp;
 385	}
 386}
 387
 388static const struct ddi_buf_trans *
 389kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 390{
 391	if (IS_KBL_ULX(dev_priv)) {
 392		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
 393		return kbl_y_ddi_translations_dp;
 394	} else if (IS_KBL_ULT(dev_priv)) {
 395		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
 396		return kbl_u_ddi_translations_dp;
 397	} else {
 398		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
 399		return kbl_ddi_translations_dp;
 400	}
 401}
 402
 403static const struct ddi_buf_trans *
 404skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 405{
 406	if (dev_priv->vbt.edp.low_vswing) {
 407		if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
 408			*n_entries = ARRAY_SIZE(skl_y_ddi_translations_edp);
 409			return skl_y_ddi_translations_edp;
 410		} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
 411			*n_entries = ARRAY_SIZE(skl_u_ddi_translations_edp);
 412			return skl_u_ddi_translations_edp;
 413		} else {
 414			*n_entries = ARRAY_SIZE(skl_ddi_translations_edp);
 415			return skl_ddi_translations_edp;
 416		}
 417	}
 418
 419	if (IS_KABYLAKE(dev_priv))
 420		return kbl_get_buf_trans_dp(dev_priv, n_entries);
 421	else
 422		return skl_get_buf_trans_dp(dev_priv, n_entries);
 423}
 424
 425static const struct ddi_buf_trans *
 426skl_get_buf_trans_hdmi(struct drm_i915_private *dev_priv, int *n_entries)
 427{
 428	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
 429		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_hdmi);
 430		return skl_y_ddi_translations_hdmi;
 431	} else {
 432		*n_entries = ARRAY_SIZE(skl_ddi_translations_hdmi);
 433		return skl_ddi_translations_hdmi;
 434	}
 435}
 436
 437static int intel_ddi_hdmi_level(struct drm_i915_private *dev_priv, enum port port)
 438{
 439	int n_hdmi_entries;
 440	int hdmi_level;
 441	int hdmi_default_entry;
 442
 443	hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
 
 
 
 
 444
 445	if (IS_BROXTON(dev_priv))
 446		return hdmi_level;
 447
 448	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
 449		skl_get_buf_trans_hdmi(dev_priv, &n_hdmi_entries);
 450		hdmi_default_entry = 8;
 451	} else if (IS_BROADWELL(dev_priv)) {
 452		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
 453		hdmi_default_entry = 7;
 454	} else if (IS_HASWELL(dev_priv)) {
 455		n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi);
 456		hdmi_default_entry = 6;
 457	} else {
 458		WARN(1, "ddi translation table missing\n");
 459		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
 460		hdmi_default_entry = 7;
 461	}
 462
 463	/* Choose a good default if VBT is badly populated */
 464	if (hdmi_level == HDMI_LEVEL_SHIFT_UNKNOWN ||
 465	    hdmi_level >= n_hdmi_entries)
 466		hdmi_level = hdmi_default_entry;
 467
 468	return hdmi_level;
 469}
 470
 471/*
 472 * Starting with Haswell, DDI port buffers must be programmed with correct
 473 * values in advance. This function programs the correct values for
 474 * DP/eDP/FDI use cases.
 
 
 475 */
 476void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 477{
 478	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 479	u32 iboost_bit = 0;
 480	int i, n_dp_entries, n_edp_entries, size;
 481	enum port port = intel_ddi_get_encoder_port(encoder);
 482	const struct ddi_buf_trans *ddi_translations_fdi;
 483	const struct ddi_buf_trans *ddi_translations_dp;
 484	const struct ddi_buf_trans *ddi_translations_edp;
 485	const struct ddi_buf_trans *ddi_translations;
 486
 487	if (IS_BROXTON(dev_priv))
 488		return;
 489
 490	if (IS_KABYLAKE(dev_priv)) {
 491		ddi_translations_fdi = NULL;
 492		ddi_translations_dp =
 493				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
 494		ddi_translations_edp =
 495				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
 496	} else if (IS_SKYLAKE(dev_priv)) {
 497		ddi_translations_fdi = NULL;
 498		ddi_translations_dp =
 499				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
 500		ddi_translations_edp =
 501				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
 502	} else if (IS_BROADWELL(dev_priv)) {
 503		ddi_translations_fdi = bdw_ddi_translations_fdi;
 504		ddi_translations_dp = bdw_ddi_translations_dp;
 505		ddi_translations_edp = bdw_get_buf_trans_edp(dev_priv, &n_edp_entries);
 506		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
 507	} else if (IS_HASWELL(dev_priv)) {
 508		ddi_translations_fdi = hsw_ddi_translations_fdi;
 509		ddi_translations_dp = hsw_ddi_translations_dp;
 510		ddi_translations_edp = hsw_ddi_translations_dp;
 511		n_dp_entries = n_edp_entries = ARRAY_SIZE(hsw_ddi_translations_dp);
 512	} else {
 513		WARN(1, "ddi translation table missing\n");
 514		ddi_translations_edp = bdw_ddi_translations_dp;
 515		ddi_translations_fdi = bdw_ddi_translations_fdi;
 516		ddi_translations_dp = bdw_ddi_translations_dp;
 517		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
 518		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
 519	}
 520
 521	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
 522		/* If we're boosting the current, set bit 31 of trans1 */
 523		if (dev_priv->vbt.ddi_port_info[port].dp_boost_level)
 524			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
 525
 526		if (WARN_ON(encoder->type == INTEL_OUTPUT_EDP &&
 527			    port != PORT_A && port != PORT_E &&
 528			    n_edp_entries > 9))
 529			n_edp_entries = 9;
 530	}
 531
 532	switch (encoder->type) {
 533	case INTEL_OUTPUT_EDP:
 534		ddi_translations = ddi_translations_edp;
 535		size = n_edp_entries;
 536		break;
 537	case INTEL_OUTPUT_DP:
 
 538		ddi_translations = ddi_translations_dp;
 539		size = n_dp_entries;
 540		break;
 541	case INTEL_OUTPUT_ANALOG:
 
 
 
 
 
 
 542		ddi_translations = ddi_translations_fdi;
 543		size = n_dp_entries;
 544		break;
 545	default:
 546		BUG();
 547	}
 548
 549	for (i = 0; i < size; i++) {
 550		I915_WRITE(DDI_BUF_TRANS_LO(port, i),
 551			   ddi_translations[i].trans1 | iboost_bit);
 552		I915_WRITE(DDI_BUF_TRANS_HI(port, i),
 553			   ddi_translations[i].trans2);
 
 
 
 
 554	}
 555}
 556
 557/*
 558 * Starting with Haswell, DDI port buffers must be programmed with correct
 559 * values in advance. This function programs the correct values for
 560 * HDMI/DVI use cases.
 561 */
 562static void intel_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder)
 563{
 564	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 565	u32 iboost_bit = 0;
 566	int n_hdmi_entries, hdmi_level;
 567	enum port port = intel_ddi_get_encoder_port(encoder);
 568	const struct ddi_buf_trans *ddi_translations_hdmi;
 569
 570	if (IS_BROXTON(dev_priv))
 571		return;
 572
 573	hdmi_level = intel_ddi_hdmi_level(dev_priv, port);
 574
 575	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
 576		ddi_translations_hdmi = skl_get_buf_trans_hdmi(dev_priv, &n_hdmi_entries);
 577
 578		/* If we're boosting the current, set bit 31 of trans1 */
 579		if (dev_priv->vbt.ddi_port_info[port].hdmi_boost_level)
 580			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
 581	} else if (IS_BROADWELL(dev_priv)) {
 582		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
 583		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
 584	} else if (IS_HASWELL(dev_priv)) {
 585		ddi_translations_hdmi = hsw_ddi_translations_hdmi;
 586		n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi);
 587	} else {
 588		WARN(1, "ddi translation table missing\n");
 589		ddi_translations_hdmi = bdw_ddi_translations_hdmi;
 590		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
 591	}
 592
 593	/* Entry 9 is for HDMI: */
 594	I915_WRITE(DDI_BUF_TRANS_LO(port, 9),
 595		   ddi_translations_hdmi[hdmi_level].trans1 | iboost_bit);
 596	I915_WRITE(DDI_BUF_TRANS_HI(port, 9),
 597		   ddi_translations_hdmi[hdmi_level].trans2);
 598}
 599
 
 
 
 
 
 
 
 
 
 
 
 
 600static void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
 601				    enum port port)
 602{
 603	i915_reg_t reg = DDI_BUF_CTL(port);
 604	int i;
 605
 606	for (i = 0; i < 16; i++) {
 607		udelay(1);
 608		if (I915_READ(reg) & DDI_BUF_IS_IDLE)
 609			return;
 610	}
 611	DRM_ERROR("Timeout waiting for DDI BUF %c idle bit\n", port_name(port));
 612}
 613
 614static uint32_t hsw_pll_to_ddi_pll_sel(struct intel_shared_dpll *pll)
 615{
 616	switch (pll->id) {
 617	case DPLL_ID_WRPLL1:
 618		return PORT_CLK_SEL_WRPLL1;
 619	case DPLL_ID_WRPLL2:
 620		return PORT_CLK_SEL_WRPLL2;
 621	case DPLL_ID_SPLL:
 622		return PORT_CLK_SEL_SPLL;
 623	case DPLL_ID_LCPLL_810:
 624		return PORT_CLK_SEL_LCPLL_810;
 625	case DPLL_ID_LCPLL_1350:
 626		return PORT_CLK_SEL_LCPLL_1350;
 627	case DPLL_ID_LCPLL_2700:
 628		return PORT_CLK_SEL_LCPLL_2700;
 629	default:
 630		MISSING_CASE(pll->id);
 631		return PORT_CLK_SEL_NONE;
 632	}
 633}
 634
 635/* Starting with Haswell, different DDI ports can work in FDI mode for
 636 * connection to the PCH-located connectors. For this, it is necessary to train
 637 * both the DDI port and PCH receiver for the desired DDI buffer settings.
 638 *
 639 * The recommended port to work in FDI mode is DDI E, which we use here. Also,
 640 * please note that when FDI mode is active on DDI E, it shares 2 lines with
 641 * DDI A (which is used for eDP)
 642 */
 643
 644void hsw_fdi_link_train(struct drm_crtc *crtc)
 645{
 646	struct drm_device *dev = crtc->dev;
 647	struct drm_i915_private *dev_priv = to_i915(dev);
 648	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 649	struct intel_encoder *encoder;
 650	u32 temp, i, rx_ctl_val, ddi_pll_sel;
 651
 652	for_each_encoder_on_crtc(dev, crtc, encoder) {
 653		WARN_ON(encoder->type != INTEL_OUTPUT_ANALOG);
 654		intel_prepare_dp_ddi_buffers(encoder);
 655	}
 656
 657	/* Set the FDI_RX_MISC pwrdn lanes and the 2 workarounds listed at the
 658	 * mode set "sequence for CRT port" document:
 659	 * - TP1 to TP2 time with the default value
 660	 * - FDI delay to 90h
 661	 *
 662	 * WaFDIAutoLinkSetTimingOverrride:hsw
 663	 */
 664	I915_WRITE(FDI_RX_MISC(PIPE_A), FDI_RX_PWRDN_LANE1_VAL(2) |
 665				  FDI_RX_PWRDN_LANE0_VAL(2) |
 666				  FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
 667
 668	/* Enable the PCH Receiver FDI PLL */
 669	rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE |
 670		     FDI_RX_PLL_ENABLE |
 671		     FDI_DP_PORT_WIDTH(intel_crtc->config->fdi_lanes);
 672	I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
 673	POSTING_READ(FDI_RX_CTL(PIPE_A));
 674	udelay(220);
 675
 676	/* Switch from Rawclk to PCDclk */
 677	rx_ctl_val |= FDI_PCDCLK;
 678	I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
 679
 680	/* Configure Port Clock Select */
 681	ddi_pll_sel = hsw_pll_to_ddi_pll_sel(intel_crtc->config->shared_dpll);
 682	I915_WRITE(PORT_CLK_SEL(PORT_E), ddi_pll_sel);
 683	WARN_ON(ddi_pll_sel != PORT_CLK_SEL_SPLL);
 684
 685	/* Start the training iterating through available voltages and emphasis,
 686	 * testing each value twice. */
 687	for (i = 0; i < ARRAY_SIZE(hsw_ddi_translations_fdi) * 2; i++) {
 688		/* Configure DP_TP_CTL with auto-training */
 689		I915_WRITE(DP_TP_CTL(PORT_E),
 690					DP_TP_CTL_FDI_AUTOTRAIN |
 691					DP_TP_CTL_ENHANCED_FRAME_ENABLE |
 692					DP_TP_CTL_LINK_TRAIN_PAT1 |
 693					DP_TP_CTL_ENABLE);
 694
 695		/* Configure and enable DDI_BUF_CTL for DDI E with next voltage.
 696		 * DDI E does not support port reversal, the functionality is
 697		 * achieved on the PCH side in FDI_RX_CTL, so no need to set the
 698		 * port reversal bit */
 699		I915_WRITE(DDI_BUF_CTL(PORT_E),
 700			   DDI_BUF_CTL_ENABLE |
 701			   ((intel_crtc->config->fdi_lanes - 1) << 1) |
 702			   DDI_BUF_TRANS_SELECT(i / 2));
 703		POSTING_READ(DDI_BUF_CTL(PORT_E));
 704
 705		udelay(600);
 706
 707		/* Program PCH FDI Receiver TU */
 708		I915_WRITE(FDI_RX_TUSIZE1(PIPE_A), TU_SIZE(64));
 709
 710		/* Enable PCH FDI Receiver with auto-training */
 711		rx_ctl_val |= FDI_RX_ENABLE | FDI_LINK_TRAIN_AUTO;
 712		I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
 713		POSTING_READ(FDI_RX_CTL(PIPE_A));
 714
 715		/* Wait for FDI receiver lane calibration */
 716		udelay(30);
 717
 718		/* Unset FDI_RX_MISC pwrdn lanes */
 719		temp = I915_READ(FDI_RX_MISC(PIPE_A));
 720		temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
 721		I915_WRITE(FDI_RX_MISC(PIPE_A), temp);
 722		POSTING_READ(FDI_RX_MISC(PIPE_A));
 723
 724		/* Wait for FDI auto training time */
 725		udelay(5);
 726
 727		temp = I915_READ(DP_TP_STATUS(PORT_E));
 728		if (temp & DP_TP_STATUS_AUTOTRAIN_DONE) {
 729			DRM_DEBUG_KMS("FDI link training done on step %d\n", i);
 730			break;
 731		}
 732
 733		/*
 734		 * Leave things enabled even if we failed to train FDI.
 735		 * Results in less fireworks from the state checker.
 736		 */
 737		if (i == ARRAY_SIZE(hsw_ddi_translations_fdi) * 2 - 1) {
 738			DRM_ERROR("FDI link training failed!\n");
 739			break;
 740		}
 741
 742		rx_ctl_val &= ~FDI_RX_ENABLE;
 743		I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
 744		POSTING_READ(FDI_RX_CTL(PIPE_A));
 745
 746		temp = I915_READ(DDI_BUF_CTL(PORT_E));
 747		temp &= ~DDI_BUF_CTL_ENABLE;
 748		I915_WRITE(DDI_BUF_CTL(PORT_E), temp);
 749		POSTING_READ(DDI_BUF_CTL(PORT_E));
 750
 751		/* Disable DP_TP_CTL and FDI_RX_CTL and retry */
 752		temp = I915_READ(DP_TP_CTL(PORT_E));
 753		temp &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
 754		temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
 755		I915_WRITE(DP_TP_CTL(PORT_E), temp);
 756		POSTING_READ(DP_TP_CTL(PORT_E));
 757
 758		intel_wait_ddi_buf_idle(dev_priv, PORT_E);
 759
 
 
 
 
 760		/* Reset FDI_RX_MISC pwrdn lanes */
 761		temp = I915_READ(FDI_RX_MISC(PIPE_A));
 762		temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
 763		temp |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
 764		I915_WRITE(FDI_RX_MISC(PIPE_A), temp);
 765		POSTING_READ(FDI_RX_MISC(PIPE_A));
 766	}
 767
 768	/* Enable normal pixel sending for FDI */
 769	I915_WRITE(DP_TP_CTL(PORT_E),
 770		   DP_TP_CTL_FDI_AUTOTRAIN |
 771		   DP_TP_CTL_LINK_TRAIN_NORMAL |
 772		   DP_TP_CTL_ENHANCED_FRAME_ENABLE |
 773		   DP_TP_CTL_ENABLE);
 774}
 775
 776void intel_ddi_init_dp_buf_reg(struct intel_encoder *encoder)
 777{
 778	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
 779	struct intel_digital_port *intel_dig_port =
 780		enc_to_dig_port(&encoder->base);
 
 
 
 
 
 
 
 
 
 
 
 781
 782	intel_dp->DP = intel_dig_port->saved_port_bits |
 783		DDI_BUF_CTL_ENABLE | DDI_BUF_TRANS_SELECT(0);
 784	intel_dp->DP |= DDI_PORT_WIDTH(intel_dp->lane_count);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 785}
 786
 787static struct intel_encoder *
 788intel_ddi_get_crtc_encoder(struct drm_crtc *crtc)
 789{
 790	struct drm_device *dev = crtc->dev;
 791	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 792	struct intel_encoder *intel_encoder, *ret = NULL;
 793	int num_encoders = 0;
 794
 795	for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
 796		ret = intel_encoder;
 797		num_encoders++;
 798	}
 799
 800	if (num_encoders != 1)
 801		WARN(1, "%d encoders on crtc for pipe %c\n", num_encoders,
 802		     pipe_name(intel_crtc->pipe));
 803
 804	BUG_ON(ret == NULL);
 805	return ret;
 806}
 807
 808struct intel_encoder *
 809intel_ddi_get_crtc_new_encoder(struct intel_crtc_state *crtc_state)
 810{
 811	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
 812	struct intel_encoder *ret = NULL;
 813	struct drm_atomic_state *state;
 814	struct drm_connector *connector;
 815	struct drm_connector_state *connector_state;
 816	int num_encoders = 0;
 817	int i;
 818
 819	state = crtc_state->base.state;
 820
 821	for_each_connector_in_state(state, connector, connector_state, i) {
 822		if (connector_state->crtc != crtc_state->base.crtc)
 823			continue;
 824
 825		ret = to_intel_encoder(connector_state->best_encoder);
 826		num_encoders++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 827	}
 828
 829	WARN(num_encoders != 1, "%d encoders on crtc for pipe %c\n", num_encoders,
 830	     pipe_name(crtc->pipe));
 
 831
 832	BUG_ON(ret == NULL);
 833	return ret;
 834}
 835
 836#define LC_FREQ 2700
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 837
 838static int hsw_ddi_calc_wrpll_link(struct drm_i915_private *dev_priv,
 839				   i915_reg_t reg)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 840{
 841	int refclk = LC_FREQ;
 842	int n, p, r;
 843	u32 wrpll;
 844
 845	wrpll = I915_READ(reg);
 846	switch (wrpll & WRPLL_PLL_REF_MASK) {
 847	case WRPLL_PLL_SSC:
 848	case WRPLL_PLL_NON_SSC:
 849		/*
 850		 * We could calculate spread here, but our checking
 851		 * code only cares about 5% accuracy, and spread is a max of
 852		 * 0.5% downspread.
 853		 */
 854		refclk = 135;
 855		break;
 856	case WRPLL_PLL_LCPLL:
 857		refclk = LC_FREQ;
 858		break;
 859	default:
 860		WARN(1, "bad wrpll refclk\n");
 861		return 0;
 862	}
 863
 864	r = wrpll & WRPLL_DIVIDER_REF_MASK;
 865	p = (wrpll & WRPLL_DIVIDER_POST_MASK) >> WRPLL_DIVIDER_POST_SHIFT;
 866	n = (wrpll & WRPLL_DIVIDER_FB_MASK) >> WRPLL_DIVIDER_FB_SHIFT;
 867
 868	/* Convert to KHz, p & r have a fixed point portion */
 869	return (refclk * n * 100) / (p * r);
 870}
 871
 872static int skl_calc_wrpll_link(struct drm_i915_private *dev_priv,
 873			       uint32_t dpll)
 874{
 875	i915_reg_t cfgcr1_reg, cfgcr2_reg;
 876	uint32_t cfgcr1_val, cfgcr2_val;
 877	uint32_t p0, p1, p2, dco_freq;
 878
 879	cfgcr1_reg = DPLL_CFGCR1(dpll);
 880	cfgcr2_reg = DPLL_CFGCR2(dpll);
 881
 882	cfgcr1_val = I915_READ(cfgcr1_reg);
 883	cfgcr2_val = I915_READ(cfgcr2_reg);
 884
 885	p0 = cfgcr2_val & DPLL_CFGCR2_PDIV_MASK;
 886	p2 = cfgcr2_val & DPLL_CFGCR2_KDIV_MASK;
 887
 888	if (cfgcr2_val &  DPLL_CFGCR2_QDIV_MODE(1))
 889		p1 = (cfgcr2_val & DPLL_CFGCR2_QDIV_RATIO_MASK) >> 8;
 890	else
 891		p1 = 1;
 892
 893
 894	switch (p0) {
 895	case DPLL_CFGCR2_PDIV_1:
 896		p0 = 1;
 897		break;
 898	case DPLL_CFGCR2_PDIV_2:
 899		p0 = 2;
 900		break;
 901	case DPLL_CFGCR2_PDIV_3:
 902		p0 = 3;
 903		break;
 904	case DPLL_CFGCR2_PDIV_7:
 905		p0 = 7;
 906		break;
 907	}
 908
 909	switch (p2) {
 910	case DPLL_CFGCR2_KDIV_5:
 911		p2 = 5;
 912		break;
 913	case DPLL_CFGCR2_KDIV_2:
 914		p2 = 2;
 915		break;
 916	case DPLL_CFGCR2_KDIV_3:
 917		p2 = 3;
 918		break;
 919	case DPLL_CFGCR2_KDIV_1:
 920		p2 = 1;
 921		break;
 922	}
 923
 924	dco_freq = (cfgcr1_val & DPLL_CFGCR1_DCO_INTEGER_MASK) * 24 * 1000;
 925
 926	dco_freq += (((cfgcr1_val & DPLL_CFGCR1_DCO_FRACTION_MASK) >> 9) * 24 *
 927		1000) / 0x8000;
 928
 929	return dco_freq / (p0 * p1 * p2 * 5);
 930}
 931
 932static void ddi_dotclock_get(struct intel_crtc_state *pipe_config)
 933{
 934	int dotclock;
 935
 936	if (pipe_config->has_pch_encoder)
 937		dotclock = intel_dotclock_calculate(pipe_config->port_clock,
 938						    &pipe_config->fdi_m_n);
 939	else if (intel_crtc_has_dp_encoder(pipe_config))
 940		dotclock = intel_dotclock_calculate(pipe_config->port_clock,
 941						    &pipe_config->dp_m_n);
 942	else if (pipe_config->has_hdmi_sink && pipe_config->pipe_bpp == 36)
 943		dotclock = pipe_config->port_clock * 2 / 3;
 944	else
 945		dotclock = pipe_config->port_clock;
 946
 947	if (pipe_config->pixel_multiplier)
 948		dotclock /= pipe_config->pixel_multiplier;
 949
 950	pipe_config->base.adjusted_mode.crtc_clock = dotclock;
 951}
 952
 953static void skl_ddi_clock_get(struct intel_encoder *encoder,
 954				struct intel_crtc_state *pipe_config)
 955{
 956	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 957	int link_clock = 0;
 958	uint32_t dpll_ctl1, dpll;
 959
 960	dpll = intel_get_shared_dpll_id(dev_priv, pipe_config->shared_dpll);
 961
 962	dpll_ctl1 = I915_READ(DPLL_CTRL1);
 963
 964	if (dpll_ctl1 & DPLL_CTRL1_HDMI_MODE(dpll)) {
 965		link_clock = skl_calc_wrpll_link(dev_priv, dpll);
 966	} else {
 967		link_clock = dpll_ctl1 & DPLL_CTRL1_LINK_RATE_MASK(dpll);
 968		link_clock >>= DPLL_CTRL1_LINK_RATE_SHIFT(dpll);
 969
 970		switch (link_clock) {
 971		case DPLL_CTRL1_LINK_RATE_810:
 972			link_clock = 81000;
 973			break;
 974		case DPLL_CTRL1_LINK_RATE_1080:
 975			link_clock = 108000;
 976			break;
 977		case DPLL_CTRL1_LINK_RATE_1350:
 978			link_clock = 135000;
 979			break;
 980		case DPLL_CTRL1_LINK_RATE_1620:
 981			link_clock = 162000;
 982			break;
 983		case DPLL_CTRL1_LINK_RATE_2160:
 984			link_clock = 216000;
 985			break;
 986		case DPLL_CTRL1_LINK_RATE_2700:
 987			link_clock = 270000;
 988			break;
 989		default:
 990			WARN(1, "Unsupported link rate\n");
 991			break;
 992		}
 993		link_clock *= 2;
 994	}
 995
 996	pipe_config->port_clock = link_clock;
 997
 998	ddi_dotclock_get(pipe_config);
 999}
1000
1001static void hsw_ddi_clock_get(struct intel_encoder *encoder,
1002			      struct intel_crtc_state *pipe_config)
1003{
1004	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1005	int link_clock = 0;
1006	u32 val, pll;
1007
1008	val = hsw_pll_to_ddi_pll_sel(pipe_config->shared_dpll);
1009	switch (val & PORT_CLK_SEL_MASK) {
1010	case PORT_CLK_SEL_LCPLL_810:
1011		link_clock = 81000;
1012		break;
1013	case PORT_CLK_SEL_LCPLL_1350:
1014		link_clock = 135000;
1015		break;
1016	case PORT_CLK_SEL_LCPLL_2700:
1017		link_clock = 270000;
1018		break;
1019	case PORT_CLK_SEL_WRPLL1:
1020		link_clock = hsw_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL(0));
1021		break;
1022	case PORT_CLK_SEL_WRPLL2:
1023		link_clock = hsw_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL(1));
1024		break;
1025	case PORT_CLK_SEL_SPLL:
1026		pll = I915_READ(SPLL_CTL) & SPLL_PLL_FREQ_MASK;
1027		if (pll == SPLL_PLL_FREQ_810MHz)
1028			link_clock = 81000;
1029		else if (pll == SPLL_PLL_FREQ_1350MHz)
1030			link_clock = 135000;
1031		else if (pll == SPLL_PLL_FREQ_2700MHz)
1032			link_clock = 270000;
1033		else {
1034			WARN(1, "bad spll freq\n");
1035			return;
1036		}
1037		break;
1038	default:
1039		WARN(1, "bad port clock sel\n");
1040		return;
1041	}
1042
1043	pipe_config->port_clock = link_clock * 2;
1044
1045	ddi_dotclock_get(pipe_config);
 
 
 
 
 
 
 
 
 
1046}
1047
1048static int bxt_calc_pll_link(struct drm_i915_private *dev_priv,
1049				enum intel_dpll_id dpll)
 
1050{
1051	struct intel_shared_dpll *pll;
1052	struct intel_dpll_hw_state *state;
1053	struct dpll clock;
 
1054
1055	/* For DDI ports we always use a shared PLL. */
1056	if (WARN_ON(dpll == DPLL_ID_PRIVATE))
1057		return 0;
 
 
 
 
 
 
 
 
 
1058
1059	pll = &dev_priv->shared_dplls[dpll];
1060	state = &pll->config.hw_state;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1061
1062	clock.m1 = 2;
1063	clock.m2 = (state->pll0 & PORT_PLL_M2_MASK) << 22;
1064	if (state->pll3 & PORT_PLL_M2_FRAC_ENABLE)
1065		clock.m2 |= state->pll2 & PORT_PLL_M2_FRAC_MASK;
1066	clock.n = (state->pll1 & PORT_PLL_N_MASK) >> PORT_PLL_N_SHIFT;
1067	clock.p1 = (state->ebb0 & PORT_PLL_P1_MASK) >> PORT_PLL_P1_SHIFT;
1068	clock.p2 = (state->ebb0 & PORT_PLL_P2_MASK) >> PORT_PLL_P2_SHIFT;
 
 
 
 
 
 
 
 
 
 
 
 
 
1069
1070	return chv_calc_dpll_params(100000, &clock);
 
 
1071}
1072
1073static void bxt_ddi_clock_get(struct intel_encoder *encoder,
1074				struct intel_crtc_state *pipe_config)
 
 
 
 
 
1075{
1076	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1077	enum port port = intel_ddi_get_encoder_port(encoder);
1078	uint32_t dpll = port;
 
 
 
 
 
1079
1080	pipe_config->port_clock = bxt_calc_pll_link(dev_priv, dpll);
1081
1082	ddi_dotclock_get(pipe_config);
1083}
1084
1085void intel_ddi_clock_get(struct intel_encoder *encoder,
1086			 struct intel_crtc_state *pipe_config)
1087{
1088	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 
 
 
 
 
 
 
 
 
 
 
1089
1090	if (INTEL_GEN(dev_priv) <= 8)
1091		hsw_ddi_clock_get(encoder, pipe_config);
1092	else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
1093		skl_ddi_clock_get(encoder, pipe_config);
1094	else if (IS_BROXTON(dev_priv))
1095		bxt_ddi_clock_get(encoder, pipe_config);
1096}
1097
1098static bool
1099hsw_ddi_pll_select(struct intel_crtc *intel_crtc,
1100		   struct intel_crtc_state *crtc_state,
1101		   struct intel_encoder *intel_encoder)
1102{
1103	struct intel_shared_dpll *pll;
1104
1105	pll = intel_get_shared_dpll(intel_crtc, crtc_state,
1106				    intel_encoder);
1107	if (!pll)
1108		DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
1109				 pipe_name(intel_crtc->pipe));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110
1111	return pll;
1112}
1113
1114static bool
1115skl_ddi_pll_select(struct intel_crtc *intel_crtc,
1116		   struct intel_crtc_state *crtc_state,
1117		   struct intel_encoder *intel_encoder)
1118{
1119	struct intel_shared_dpll *pll;
 
1120
1121	pll = intel_get_shared_dpll(intel_crtc, crtc_state, intel_encoder);
1122	if (pll == NULL) {
1123		DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
1124				 pipe_name(intel_crtc->pipe));
 
 
 
 
 
 
 
 
 
1125		return false;
1126	}
1127
1128	return true;
1129}
1130
1131static bool
1132bxt_ddi_pll_select(struct intel_crtc *intel_crtc,
1133		   struct intel_crtc_state *crtc_state,
1134		   struct intel_encoder *intel_encoder)
1135{
1136	return !!intel_get_shared_dpll(intel_crtc, crtc_state, intel_encoder);
1137}
1138
1139/*
1140 * Tries to find a *shared* PLL for the CRTC and store it in
1141 * intel_crtc->ddi_pll_sel.
1142 *
1143 * For private DPLLs, compute_config() should do the selection for us. This
1144 * function should be folded into compute_config() eventually.
1145 */
1146bool intel_ddi_pll_select(struct intel_crtc *intel_crtc,
1147			  struct intel_crtc_state *crtc_state)
1148{
1149	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
1150	struct intel_encoder *intel_encoder =
1151		intel_ddi_get_crtc_new_encoder(crtc_state);
1152
1153	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
1154		return skl_ddi_pll_select(intel_crtc, crtc_state,
1155					  intel_encoder);
1156	else if (IS_BROXTON(dev_priv))
1157		return bxt_ddi_pll_select(intel_crtc, crtc_state,
1158					  intel_encoder);
1159	else
1160		return hsw_ddi_pll_select(intel_crtc, crtc_state,
1161					  intel_encoder);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1162}
1163
1164void intel_ddi_set_pipe_settings(struct drm_crtc *crtc)
1165{
1166	struct drm_i915_private *dev_priv = to_i915(crtc->dev);
1167	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1168	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1169	enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1170	int type = intel_encoder->type;
1171	uint32_t temp;
1172
1173	if (type == INTEL_OUTPUT_DP || type == INTEL_OUTPUT_EDP || type == INTEL_OUTPUT_DP_MST) {
1174		WARN_ON(transcoder_is_dsi(cpu_transcoder));
1175
1176		temp = TRANS_MSA_SYNC_CLK;
1177		switch (intel_crtc->config->pipe_bpp) {
1178		case 18:
1179			temp |= TRANS_MSA_6_BPC;
1180			break;
1181		case 24:
1182			temp |= TRANS_MSA_8_BPC;
1183			break;
1184		case 30:
1185			temp |= TRANS_MSA_10_BPC;
1186			break;
1187		case 36:
1188			temp |= TRANS_MSA_12_BPC;
1189			break;
1190		default:
1191			BUG();
1192		}
1193		I915_WRITE(TRANS_MSA_MISC(cpu_transcoder), temp);
1194	}
1195}
1196
1197void intel_ddi_set_vc_payload_alloc(struct drm_crtc *crtc, bool state)
1198{
1199	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1200	struct drm_device *dev = crtc->dev;
1201	struct drm_i915_private *dev_priv = to_i915(dev);
1202	enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1203	uint32_t temp;
1204	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1205	if (state == true)
1206		temp |= TRANS_DDI_DP_VC_PAYLOAD_ALLOC;
1207	else
1208		temp &= ~TRANS_DDI_DP_VC_PAYLOAD_ALLOC;
1209	I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
1210}
1211
1212void intel_ddi_enable_transcoder_func(struct drm_crtc *crtc)
1213{
1214	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1215	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
 
1216	struct drm_device *dev = crtc->dev;
1217	struct drm_i915_private *dev_priv = to_i915(dev);
1218	enum pipe pipe = intel_crtc->pipe;
1219	enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1220	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1221	int type = intel_encoder->type;
1222	uint32_t temp;
1223
1224	/* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
1225	temp = TRANS_DDI_FUNC_ENABLE;
1226	temp |= TRANS_DDI_SELECT_PORT(port);
1227
1228	switch (intel_crtc->config->pipe_bpp) {
1229	case 18:
1230		temp |= TRANS_DDI_BPC_6;
1231		break;
1232	case 24:
1233		temp |= TRANS_DDI_BPC_8;
1234		break;
1235	case 30:
1236		temp |= TRANS_DDI_BPC_10;
1237		break;
1238	case 36:
1239		temp |= TRANS_DDI_BPC_12;
1240		break;
1241	default:
1242		BUG();
1243	}
1244
1245	if (intel_crtc->config->base.adjusted_mode.flags & DRM_MODE_FLAG_PVSYNC)
1246		temp |= TRANS_DDI_PVSYNC;
1247	if (intel_crtc->config->base.adjusted_mode.flags & DRM_MODE_FLAG_PHSYNC)
1248		temp |= TRANS_DDI_PHSYNC;
1249
1250	if (cpu_transcoder == TRANSCODER_EDP) {
1251		switch (pipe) {
1252		case PIPE_A:
1253			/* On Haswell, can only use the always-on power well for
1254			 * eDP when not using the panel fitter, and when not
1255			 * using motion blur mitigation (which we don't
1256			 * support). */
1257			if (IS_HASWELL(dev_priv) &&
1258			    (intel_crtc->config->pch_pfit.enabled ||
1259			     intel_crtc->config->pch_pfit.force_thru))
1260				temp |= TRANS_DDI_EDP_INPUT_A_ONOFF;
1261			else
1262				temp |= TRANS_DDI_EDP_INPUT_A_ON;
1263			break;
1264		case PIPE_B:
1265			temp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
1266			break;
1267		case PIPE_C:
1268			temp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
1269			break;
1270		default:
1271			BUG();
1272			break;
1273		}
1274	}
1275
1276	if (type == INTEL_OUTPUT_HDMI) {
1277		if (intel_crtc->config->has_hdmi_sink)
 
 
1278			temp |= TRANS_DDI_MODE_SELECT_HDMI;
1279		else
1280			temp |= TRANS_DDI_MODE_SELECT_DVI;
 
1281	} else if (type == INTEL_OUTPUT_ANALOG) {
1282		temp |= TRANS_DDI_MODE_SELECT_FDI;
1283		temp |= (intel_crtc->config->fdi_lanes - 1) << 1;
1284	} else if (type == INTEL_OUTPUT_DP ||
 
1285		   type == INTEL_OUTPUT_EDP) {
 
 
1286		temp |= TRANS_DDI_MODE_SELECT_DP_SST;
1287		temp |= DDI_PORT_WIDTH(intel_crtc->config->lane_count);
1288	} else if (type == INTEL_OUTPUT_DP_MST) {
1289		temp |= TRANS_DDI_MODE_SELECT_DP_MST;
1290		temp |= DDI_PORT_WIDTH(intel_crtc->config->lane_count);
1291	} else {
1292		WARN(1, "Invalid encoder type %d for pipe %c\n",
1293		     intel_encoder->type, pipe_name(pipe));
1294	}
1295
1296	I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
1297}
1298
1299void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,
1300				       enum transcoder cpu_transcoder)
1301{
1302	i915_reg_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
1303	uint32_t val = I915_READ(reg);
1304
1305	val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK | TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
1306	val |= TRANS_DDI_PORT_NONE;
1307	I915_WRITE(reg, val);
1308}
1309
1310bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
1311{
1312	struct drm_device *dev = intel_connector->base.dev;
1313	struct drm_i915_private *dev_priv = to_i915(dev);
1314	struct intel_encoder *intel_encoder = intel_connector->encoder;
1315	int type = intel_connector->base.connector_type;
1316	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1317	enum pipe pipe = 0;
1318	enum transcoder cpu_transcoder;
1319	enum intel_display_power_domain power_domain;
1320	uint32_t tmp;
1321	bool ret;
1322
1323	power_domain = intel_display_port_power_domain(intel_encoder);
1324	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
1325		return false;
1326
1327	if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) {
1328		ret = false;
1329		goto out;
1330	}
1331
1332	if (port == PORT_A)
1333		cpu_transcoder = TRANSCODER_EDP;
1334	else
1335		cpu_transcoder = (enum transcoder) pipe;
1336
1337	tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1338
1339	switch (tmp & TRANS_DDI_MODE_SELECT_MASK) {
1340	case TRANS_DDI_MODE_SELECT_HDMI:
1341	case TRANS_DDI_MODE_SELECT_DVI:
1342		ret = type == DRM_MODE_CONNECTOR_HDMIA;
1343		break;
1344
1345	case TRANS_DDI_MODE_SELECT_DP_SST:
1346		ret = type == DRM_MODE_CONNECTOR_eDP ||
1347		      type == DRM_MODE_CONNECTOR_DisplayPort;
1348		break;
1349
1350	case TRANS_DDI_MODE_SELECT_DP_MST:
1351		/* if the transcoder is in MST state then
1352		 * connector isn't connected */
1353		ret = false;
1354		break;
1355
1356	case TRANS_DDI_MODE_SELECT_FDI:
1357		ret = type == DRM_MODE_CONNECTOR_VGA;
1358		break;
1359
1360	default:
1361		ret = false;
1362		break;
1363	}
1364
1365out:
1366	intel_display_power_put(dev_priv, power_domain);
1367
1368	return ret;
1369}
1370
1371bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
1372			    enum pipe *pipe)
1373{
1374	struct drm_device *dev = encoder->base.dev;
1375	struct drm_i915_private *dev_priv = to_i915(dev);
1376	enum port port = intel_ddi_get_encoder_port(encoder);
1377	enum intel_display_power_domain power_domain;
1378	u32 tmp;
1379	int i;
1380	bool ret;
1381
1382	power_domain = intel_display_port_power_domain(encoder);
1383	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
1384		return false;
1385
1386	ret = false;
1387
1388	tmp = I915_READ(DDI_BUF_CTL(port));
1389
1390	if (!(tmp & DDI_BUF_CTL_ENABLE))
1391		goto out;
1392
1393	if (port == PORT_A) {
1394		tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
1395
1396		switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
1397		case TRANS_DDI_EDP_INPUT_A_ON:
1398		case TRANS_DDI_EDP_INPUT_A_ONOFF:
1399			*pipe = PIPE_A;
1400			break;
1401		case TRANS_DDI_EDP_INPUT_B_ONOFF:
1402			*pipe = PIPE_B;
1403			break;
1404		case TRANS_DDI_EDP_INPUT_C_ONOFF:
1405			*pipe = PIPE_C;
1406			break;
1407		}
1408
1409		ret = true;
1410
1411		goto out;
1412	}
1413
1414	for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) {
1415		tmp = I915_READ(TRANS_DDI_FUNC_CTL(i));
1416
1417		if ((tmp & TRANS_DDI_PORT_MASK) == TRANS_DDI_SELECT_PORT(port)) {
1418			if ((tmp & TRANS_DDI_MODE_SELECT_MASK) ==
1419			    TRANS_DDI_MODE_SELECT_DP_MST)
1420				goto out;
1421
1422			*pipe = i;
1423			ret = true;
1424
1425			goto out;
 
 
 
 
1426		}
1427	}
1428
1429	DRM_DEBUG_KMS("No pipe for ddi port %c found\n", port_name(port));
1430
1431out:
1432	if (ret && IS_BROXTON(dev_priv)) {
1433		tmp = I915_READ(BXT_PHY_CTL(port));
1434		if ((tmp & (BXT_PHY_LANE_POWERDOWN_ACK |
1435			    BXT_PHY_LANE_ENABLED)) != BXT_PHY_LANE_ENABLED)
1436			DRM_ERROR("Port %c enabled but PHY powered down? "
1437				  "(PHY_CTL %08x)\n", port_name(port), tmp);
1438	}
1439
1440	intel_display_power_put(dev_priv, power_domain);
1441
1442	return ret;
1443}
1444
1445void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc)
1446{
1447	struct drm_crtc *crtc = &intel_crtc->base;
1448	struct drm_device *dev = crtc->dev;
1449	struct drm_i915_private *dev_priv = to_i915(dev);
1450	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1451	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1452	enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1453
1454	if (cpu_transcoder != TRANSCODER_EDP)
1455		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
1456			   TRANS_CLK_SEL_PORT(port));
1457}
1458
1459void intel_ddi_disable_pipe_clock(struct intel_crtc *intel_crtc)
1460{
1461	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
1462	enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1463
1464	if (cpu_transcoder != TRANSCODER_EDP)
1465		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
1466			   TRANS_CLK_SEL_DISABLED);
1467}
1468
1469static void _skl_ddi_set_iboost(struct drm_i915_private *dev_priv,
1470				enum port port, uint8_t iboost)
1471{
1472	u32 tmp;
1473
1474	tmp = I915_READ(DISPIO_CR_TX_BMU_CR0);
1475	tmp &= ~(BALANCE_LEG_MASK(port) | BALANCE_LEG_DISABLE(port));
1476	if (iboost)
1477		tmp |= iboost << BALANCE_LEG_SHIFT(port);
1478	else
1479		tmp |= BALANCE_LEG_DISABLE(port);
1480	I915_WRITE(DISPIO_CR_TX_BMU_CR0, tmp);
1481}
1482
1483static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
 
1484{
1485	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base);
1486	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
1487	enum port port = intel_dig_port->port;
1488	int type = encoder->type;
1489	const struct ddi_buf_trans *ddi_translations;
1490	uint8_t iboost;
1491	uint8_t dp_iboost, hdmi_iboost;
1492	int n_entries;
1493
1494	/* VBT may override standard boost values */
1495	dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
1496	hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
1497
1498	if (type == INTEL_OUTPUT_DP) {
1499		if (dp_iboost) {
1500			iboost = dp_iboost;
1501		} else {
1502			if (IS_KABYLAKE(dev_priv))
1503				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
1504									&n_entries);
1505			else
1506				ddi_translations = skl_get_buf_trans_dp(dev_priv,
1507									&n_entries);
1508			iboost = ddi_translations[level].i_boost;
1509		}
1510	} else if (type == INTEL_OUTPUT_EDP) {
1511		if (dp_iboost) {
1512			iboost = dp_iboost;
1513		} else {
1514			ddi_translations = skl_get_buf_trans_edp(dev_priv, &n_entries);
1515
1516			if (WARN_ON(port != PORT_A &&
1517				    port != PORT_E && n_entries > 9))
1518				n_entries = 9;
1519
1520			iboost = ddi_translations[level].i_boost;
1521		}
1522	} else if (type == INTEL_OUTPUT_HDMI) {
1523		if (hdmi_iboost) {
1524			iboost = hdmi_iboost;
1525		} else {
1526			ddi_translations = skl_get_buf_trans_hdmi(dev_priv, &n_entries);
1527			iboost = ddi_translations[level].i_boost;
1528		}
1529	} else {
1530		return;
1531	}
1532
1533	/* Make sure that the requested I_boost is valid */
1534	if (iboost && iboost != 0x1 && iboost != 0x3 && iboost != 0x7) {
1535		DRM_ERROR("Invalid I_boost value %u\n", iboost);
1536		return;
1537	}
1538
1539	_skl_ddi_set_iboost(dev_priv, port, iboost);
1540
1541	if (port == PORT_A && intel_dig_port->max_lanes == 4)
1542		_skl_ddi_set_iboost(dev_priv, PORT_E, iboost);
1543}
1544
1545static void bxt_ddi_vswing_sequence(struct drm_i915_private *dev_priv,
1546				    u32 level, enum port port, int type)
1547{
1548	const struct bxt_ddi_buf_trans *ddi_translations;
1549	u32 n_entries, i;
1550
1551	if (type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.low_vswing) {
1552		n_entries = ARRAY_SIZE(bxt_ddi_translations_edp);
1553		ddi_translations = bxt_ddi_translations_edp;
1554	} else if (type == INTEL_OUTPUT_DP
1555			|| type == INTEL_OUTPUT_EDP) {
1556		n_entries = ARRAY_SIZE(bxt_ddi_translations_dp);
1557		ddi_translations = bxt_ddi_translations_dp;
1558	} else if (type == INTEL_OUTPUT_HDMI) {
1559		n_entries = ARRAY_SIZE(bxt_ddi_translations_hdmi);
1560		ddi_translations = bxt_ddi_translations_hdmi;
1561	} else {
1562		DRM_DEBUG_KMS("Vswing programming not done for encoder %d\n",
1563				type);
1564		return;
 
1565	}
1566
1567	/* Check if default value has to be used */
1568	if (level >= n_entries ||
1569	    (type == INTEL_OUTPUT_HDMI && level == HDMI_LEVEL_SHIFT_UNKNOWN)) {
1570		for (i = 0; i < n_entries; i++) {
1571			if (ddi_translations[i].default_index) {
1572				level = i;
1573				break;
1574			}
1575		}
1576	}
1577
1578	bxt_ddi_phy_set_signal_level(dev_priv, port,
1579				     ddi_translations[level].margin,
1580				     ddi_translations[level].scale,
1581				     ddi_translations[level].enable,
1582				     ddi_translations[level].deemphasis);
1583}
1584
1585static uint32_t translate_signal_level(int signal_levels)
1586{
1587	uint32_t level;
 
 
 
 
 
 
 
 
 
 
1588
1589	switch (signal_levels) {
1590	default:
1591		DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level: 0x%x\n",
1592			      signal_levels);
1593	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1594		level = 0;
1595		break;
1596	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1597		level = 1;
1598		break;
1599	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1600		level = 2;
1601		break;
1602	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_3:
1603		level = 3;
1604		break;
1605
1606	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1607		level = 4;
1608		break;
1609	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1610		level = 5;
1611		break;
1612	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1613		level = 6;
1614		break;
1615
1616	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1617		level = 7;
1618		break;
1619	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1620		level = 8;
1621		break;
1622
1623	case DP_TRAIN_VOLTAGE_SWING_LEVEL_3 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1624		level = 9;
1625		break;
 
 
 
 
 
 
 
 
1626	}
1627
1628	return level;
1629}
1630
1631uint32_t ddi_signal_levels(struct intel_dp *intel_dp)
1632{
1633	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
1634	struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
1635	struct intel_encoder *encoder = &dport->base;
1636	uint8_t train_set = intel_dp->train_set[0];
1637	int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
1638					 DP_TRAIN_PRE_EMPHASIS_MASK);
1639	enum port port = dport->port;
1640	uint32_t level;
1641
1642	level = translate_signal_level(signal_levels);
1643
1644	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
1645		skl_ddi_set_iboost(encoder, level);
1646	else if (IS_BROXTON(dev_priv))
1647		bxt_ddi_vswing_sequence(dev_priv, level, port, encoder->type);
1648
1649	return DDI_BUF_TRANS_SELECT(level);
 
 
1650}
1651
1652void intel_ddi_clk_select(struct intel_encoder *encoder,
1653			  struct intel_shared_dpll *pll)
1654{
1655	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1656	enum port port = intel_ddi_get_encoder_port(encoder);
1657
1658	if (WARN_ON(!pll))
1659		return;
1660
1661	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
1662		uint32_t val;
1663
1664		/* DDI -> PLL mapping  */
1665		val = I915_READ(DPLL_CTRL2);
1666
1667		val &= ~(DPLL_CTRL2_DDI_CLK_OFF(port) |
1668			DPLL_CTRL2_DDI_CLK_SEL_MASK(port));
1669		val |= (DPLL_CTRL2_DDI_CLK_SEL(pll->id, port) |
1670			DPLL_CTRL2_DDI_SEL_OVERRIDE(port));
1671
1672		I915_WRITE(DPLL_CTRL2, val);
1673
1674	} else if (INTEL_INFO(dev_priv)->gen < 9) {
1675		I915_WRITE(PORT_CLK_SEL(port), hsw_pll_to_ddi_pll_sel(pll));
1676	}
1677}
1678
1679static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
1680				    int link_rate, uint32_t lane_count,
1681				    struct intel_shared_dpll *pll,
1682				    bool link_mst)
1683{
1684	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1685	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1686	enum port port = intel_ddi_get_encoder_port(encoder);
 
 
 
1687
1688	intel_dp_set_link_params(intel_dp, link_rate, lane_count,
1689				 link_mst);
1690	if (encoder->type == INTEL_OUTPUT_EDP)
1691		intel_edp_panel_on(intel_dp);
 
1692
1693	intel_ddi_clk_select(encoder, pll);
1694	intel_prepare_dp_ddi_buffers(encoder);
1695	intel_ddi_init_dp_buf_reg(encoder);
1696	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
1697	intel_dp_start_link_train(intel_dp);
1698	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
1699		intel_dp_stop_link_train(intel_dp);
1700}
1701
1702static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
1703				      bool has_hdmi_sink,
1704				      struct drm_display_mode *adjusted_mode,
1705				      struct intel_shared_dpll *pll)
1706{
1707	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
1708	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1709	struct drm_encoder *drm_encoder = &encoder->base;
1710	enum port port = intel_ddi_get_encoder_port(encoder);
1711	int level = intel_ddi_hdmi_level(dev_priv, port);
1712
1713	intel_dp_dual_mode_set_tmds_output(intel_hdmi, true);
1714	intel_ddi_clk_select(encoder, pll);
1715	intel_prepare_hdmi_ddi_buffers(encoder);
1716	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
1717		skl_ddi_set_iboost(encoder, level);
1718	else if (IS_BROXTON(dev_priv))
1719		bxt_ddi_vswing_sequence(dev_priv, level, port,
1720					INTEL_OUTPUT_HDMI);
1721
1722	intel_hdmi->set_infoframes(drm_encoder,
1723				   has_hdmi_sink,
1724				   adjusted_mode);
1725}
1726
1727static void intel_ddi_pre_enable(struct intel_encoder *intel_encoder,
1728				 struct intel_crtc_state *pipe_config,
1729				 struct drm_connector_state *conn_state)
1730{
1731	struct drm_encoder *encoder = &intel_encoder->base;
1732	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
1733	int type = intel_encoder->type;
1734
1735	if (type == INTEL_OUTPUT_DP || type == INTEL_OUTPUT_EDP) {
1736		intel_ddi_pre_enable_dp(intel_encoder,
1737					crtc->config->port_clock,
1738					crtc->config->lane_count,
1739					crtc->config->shared_dpll,
1740					intel_crtc_has_type(crtc->config,
1741							    INTEL_OUTPUT_DP_MST));
1742	}
1743	if (type == INTEL_OUTPUT_HDMI) {
1744		intel_ddi_pre_enable_hdmi(intel_encoder,
1745					  crtc->config->has_hdmi_sink,
1746					  &crtc->config->base.adjusted_mode,
1747					  crtc->config->shared_dpll);
1748	}
1749}
1750
1751static void intel_ddi_post_disable(struct intel_encoder *intel_encoder,
1752				   struct intel_crtc_state *old_crtc_state,
1753				   struct drm_connector_state *old_conn_state)
1754{
1755	struct drm_encoder *encoder = &intel_encoder->base;
1756	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
1757	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1758	int type = intel_encoder->type;
1759	uint32_t val;
1760	bool wait = false;
1761
1762	/* old_crtc_state and old_conn_state are NULL when called from DP_MST */
1763
1764	val = I915_READ(DDI_BUF_CTL(port));
1765	if (val & DDI_BUF_CTL_ENABLE) {
1766		val &= ~DDI_BUF_CTL_ENABLE;
1767		I915_WRITE(DDI_BUF_CTL(port), val);
1768		wait = true;
1769	}
1770
1771	val = I915_READ(DP_TP_CTL(port));
1772	val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
1773	val |= DP_TP_CTL_LINK_TRAIN_PAT1;
1774	I915_WRITE(DP_TP_CTL(port), val);
1775
1776	if (wait)
1777		intel_wait_ddi_buf_idle(dev_priv, port);
1778
1779	if (type == INTEL_OUTPUT_DP || type == INTEL_OUTPUT_EDP) {
1780		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1781		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
1782		intel_edp_panel_vdd_on(intel_dp);
1783		intel_edp_panel_off(intel_dp);
1784	}
1785
1786	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
1787		I915_WRITE(DPLL_CTRL2, (I915_READ(DPLL_CTRL2) |
1788					DPLL_CTRL2_DDI_CLK_OFF(port)));
1789	else if (INTEL_GEN(dev_priv) < 9)
1790		I915_WRITE(PORT_CLK_SEL(port), PORT_CLK_SEL_NONE);
1791
1792	if (type == INTEL_OUTPUT_HDMI) {
1793		struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
1794
1795		intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
1796	}
1797}
1798
1799void intel_ddi_fdi_post_disable(struct intel_encoder *intel_encoder,
1800				struct intel_crtc_state *old_crtc_state,
1801				struct drm_connector_state *old_conn_state)
1802{
1803	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
1804	uint32_t val;
1805
1806	/*
1807	 * Bspec lists this as both step 13 (before DDI_BUF_CTL disable)
1808	 * and step 18 (after clearing PORT_CLK_SEL). Based on a BUN,
1809	 * step 13 is the correct place for it. Step 18 is where it was
1810	 * originally before the BUN.
1811	 */
1812	val = I915_READ(FDI_RX_CTL(PIPE_A));
1813	val &= ~FDI_RX_ENABLE;
1814	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
1815
1816	intel_ddi_post_disable(intel_encoder, old_crtc_state, old_conn_state);
1817
1818	val = I915_READ(FDI_RX_MISC(PIPE_A));
1819	val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
1820	val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
1821	I915_WRITE(FDI_RX_MISC(PIPE_A), val);
1822
1823	val = I915_READ(FDI_RX_CTL(PIPE_A));
1824	val &= ~FDI_PCDCLK;
1825	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
1826
1827	val = I915_READ(FDI_RX_CTL(PIPE_A));
1828	val &= ~FDI_RX_PLL_ENABLE;
1829	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
1830}
1831
1832static void intel_enable_ddi(struct intel_encoder *intel_encoder,
1833			     struct intel_crtc_state *pipe_config,
1834			     struct drm_connector_state *conn_state)
1835{
1836	struct drm_encoder *encoder = &intel_encoder->base;
1837	struct drm_crtc *crtc = encoder->crtc;
1838	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1839	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 
 
1840	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1841	int type = intel_encoder->type;
 
1842
1843	if (type == INTEL_OUTPUT_HDMI) {
1844		struct intel_digital_port *intel_dig_port =
1845			enc_to_dig_port(encoder);
1846
1847		/* In HDMI/DVI mode, the port width, and swing/emphasis values
1848		 * are ignored so nothing special needs to be done besides
1849		 * enabling the port.
1850		 */
1851		I915_WRITE(DDI_BUF_CTL(port),
1852			   intel_dig_port->saved_port_bits |
1853			   DDI_BUF_CTL_ENABLE);
1854	} else if (type == INTEL_OUTPUT_EDP) {
1855		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1856
1857		if (port == PORT_A && INTEL_GEN(dev_priv) < 9)
1858			intel_dp_stop_link_train(intel_dp);
1859
1860		intel_edp_backlight_on(intel_dp);
1861		intel_psr_enable(intel_dp);
1862		intel_edp_drrs_enable(intel_dp, pipe_config);
1863	}
1864
1865	if (intel_crtc->config->has_audio) {
1866		intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
1867		intel_audio_codec_enable(intel_encoder, pipe_config, conn_state);
 
1868	}
1869}
1870
1871static void intel_disable_ddi(struct intel_encoder *intel_encoder,
1872			      struct intel_crtc_state *old_crtc_state,
1873			      struct drm_connector_state *old_conn_state)
1874{
1875	struct drm_encoder *encoder = &intel_encoder->base;
1876	struct drm_crtc *crtc = encoder->crtc;
1877	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 
1878	int type = intel_encoder->type;
1879	struct drm_device *dev = encoder->dev;
1880	struct drm_i915_private *dev_priv = to_i915(dev);
 
1881
1882	if (intel_crtc->config->has_audio) {
1883		intel_audio_codec_disable(intel_encoder);
1884		intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
 
 
1885	}
1886
1887	if (type == INTEL_OUTPUT_EDP) {
1888		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1889
1890		intel_edp_drrs_disable(intel_dp, old_crtc_state);
1891		intel_psr_disable(intel_dp);
1892		intel_edp_backlight_off(intel_dp);
1893	}
1894}
1895
1896static void bxt_ddi_pre_pll_enable(struct intel_encoder *encoder,
1897				   struct intel_crtc_state *pipe_config,
1898				   struct drm_connector_state *conn_state)
1899{
1900	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1901	uint8_t mask = intel_crtc->config->lane_lat_optim_mask;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1902
1903	bxt_ddi_phy_set_lane_optim_mask(encoder, mask);
 
1904}
1905
1906void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
1907{
1908	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
1909	struct drm_i915_private *dev_priv =
1910		to_i915(intel_dig_port->base.base.dev);
1911	enum port port = intel_dig_port->port;
1912	uint32_t val;
1913	bool wait = false;
1914
1915	if (I915_READ(DP_TP_CTL(port)) & DP_TP_CTL_ENABLE) {
1916		val = I915_READ(DDI_BUF_CTL(port));
1917		if (val & DDI_BUF_CTL_ENABLE) {
1918			val &= ~DDI_BUF_CTL_ENABLE;
1919			I915_WRITE(DDI_BUF_CTL(port), val);
1920			wait = true;
1921		}
1922
1923		val = I915_READ(DP_TP_CTL(port));
1924		val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
1925		val |= DP_TP_CTL_LINK_TRAIN_PAT1;
1926		I915_WRITE(DP_TP_CTL(port), val);
1927		POSTING_READ(DP_TP_CTL(port));
1928
1929		if (wait)
1930			intel_wait_ddi_buf_idle(dev_priv, port);
1931	}
1932
1933	val = DP_TP_CTL_ENABLE |
1934	      DP_TP_CTL_LINK_TRAIN_PAT1 | DP_TP_CTL_SCRAMBLE_DISABLE;
1935	if (intel_dp->link_mst)
1936		val |= DP_TP_CTL_MODE_MST;
1937	else {
1938		val |= DP_TP_CTL_MODE_SST;
1939		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
1940			val |= DP_TP_CTL_ENHANCED_FRAME_ENABLE;
1941	}
1942	I915_WRITE(DP_TP_CTL(port), val);
1943	POSTING_READ(DP_TP_CTL(port));
1944
1945	intel_dp->DP |= DDI_BUF_CTL_ENABLE;
1946	I915_WRITE(DDI_BUF_CTL(port), intel_dp->DP);
1947	POSTING_READ(DDI_BUF_CTL(port));
1948
1949	udelay(600);
1950}
1951
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1952void intel_ddi_get_config(struct intel_encoder *encoder,
1953			  struct intel_crtc_state *pipe_config)
1954{
1955	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1956	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1957	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
1958	struct intel_hdmi *intel_hdmi;
1959	u32 temp, flags = 0;
1960
1961	/* XXX: DSI transcoder paranoia */
1962	if (WARN_ON(transcoder_is_dsi(cpu_transcoder)))
1963		return;
1964
1965	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1966	if (temp & TRANS_DDI_PHSYNC)
1967		flags |= DRM_MODE_FLAG_PHSYNC;
1968	else
1969		flags |= DRM_MODE_FLAG_NHSYNC;
1970	if (temp & TRANS_DDI_PVSYNC)
1971		flags |= DRM_MODE_FLAG_PVSYNC;
1972	else
1973		flags |= DRM_MODE_FLAG_NVSYNC;
1974
1975	pipe_config->base.adjusted_mode.flags |= flags;
1976
1977	switch (temp & TRANS_DDI_BPC_MASK) {
1978	case TRANS_DDI_BPC_6:
1979		pipe_config->pipe_bpp = 18;
1980		break;
1981	case TRANS_DDI_BPC_8:
1982		pipe_config->pipe_bpp = 24;
1983		break;
1984	case TRANS_DDI_BPC_10:
1985		pipe_config->pipe_bpp = 30;
1986		break;
1987	case TRANS_DDI_BPC_12:
1988		pipe_config->pipe_bpp = 36;
1989		break;
1990	default:
1991		break;
1992	}
1993
1994	switch (temp & TRANS_DDI_MODE_SELECT_MASK) {
1995	case TRANS_DDI_MODE_SELECT_HDMI:
1996		pipe_config->has_hdmi_sink = true;
1997		intel_hdmi = enc_to_intel_hdmi(&encoder->base);
1998
1999		if (intel_hdmi->infoframe_enabled(&encoder->base, pipe_config))
2000			pipe_config->has_infoframe = true;
2001		/* fall through */
2002	case TRANS_DDI_MODE_SELECT_DVI:
2003		pipe_config->lane_count = 4;
2004		break;
2005	case TRANS_DDI_MODE_SELECT_FDI:
2006		break;
2007	case TRANS_DDI_MODE_SELECT_DP_SST:
2008	case TRANS_DDI_MODE_SELECT_DP_MST:
2009		pipe_config->lane_count =
2010			((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
2011		intel_dp_get_m_n(intel_crtc, pipe_config);
2012		break;
2013	default:
2014		break;
2015	}
2016
2017	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
2018		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
2019		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
2020			pipe_config->has_audio = true;
2021	}
2022
2023	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp &&
2024	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
2025		/*
2026		 * This is a big fat ugly hack.
2027		 *
2028		 * Some machines in UEFI boot mode provide us a VBT that has 18
2029		 * bpp and 1.62 GHz link bandwidth for eDP, which for reasons
2030		 * unknown we fail to light up. Yet the same BIOS boots up with
2031		 * 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as
2032		 * max, not what it tells us to use.
2033		 *
2034		 * Note: This will still be broken if the eDP panel is not lit
2035		 * up by the BIOS, and thus we can't get the mode at module
2036		 * load.
2037		 */
2038		DRM_DEBUG_KMS("pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n",
2039			      pipe_config->pipe_bpp, dev_priv->vbt.edp.bpp);
2040		dev_priv->vbt.edp.bpp = pipe_config->pipe_bpp;
2041	}
2042
2043	intel_ddi_clock_get(encoder, pipe_config);
 
2044
2045	if (IS_BROXTON(dev_priv))
2046		pipe_config->lane_lat_optim_mask =
2047			bxt_ddi_phy_get_lane_lat_optim_mask(encoder);
 
2048}
2049
2050static bool intel_ddi_compute_config(struct intel_encoder *encoder,
2051				     struct intel_crtc_state *pipe_config,
2052				     struct drm_connector_state *conn_state)
2053{
2054	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2055	int type = encoder->type;
2056	int port = intel_ddi_get_encoder_port(encoder);
2057	int ret;
2058
2059	WARN(type == INTEL_OUTPUT_UNKNOWN, "compute_config() on unknown output!\n");
2060
2061	if (port == PORT_A)
2062		pipe_config->cpu_transcoder = TRANSCODER_EDP;
2063
2064	if (type == INTEL_OUTPUT_HDMI)
2065		ret = intel_hdmi_compute_config(encoder, pipe_config, conn_state);
2066	else
2067		ret = intel_dp_compute_config(encoder, pipe_config, conn_state);
2068
2069	if (IS_BROXTON(dev_priv) && ret)
2070		pipe_config->lane_lat_optim_mask =
2071			bxt_ddi_phy_calc_lane_lat_optim_mask(encoder,
2072							     pipe_config->lane_count);
2073
2074	return ret;
2075
2076}
2077
2078static const struct drm_encoder_funcs intel_ddi_funcs = {
2079	.reset = intel_dp_encoder_reset,
2080	.destroy = intel_dp_encoder_destroy,
2081};
2082
2083static struct intel_connector *
2084intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
2085{
2086	struct intel_connector *connector;
2087	enum port port = intel_dig_port->port;
2088
2089	connector = intel_connector_alloc();
2090	if (!connector)
2091		return NULL;
2092
2093	intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
2094	if (!intel_dp_init_connector(intel_dig_port, connector)) {
2095		kfree(connector);
2096		return NULL;
2097	}
2098
2099	return connector;
2100}
2101
2102static struct intel_connector *
2103intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
2104{
2105	struct intel_connector *connector;
2106	enum port port = intel_dig_port->port;
2107
2108	connector = intel_connector_alloc();
2109	if (!connector)
2110		return NULL;
2111
2112	intel_dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port);
2113	intel_hdmi_init_connector(intel_dig_port, connector);
2114
2115	return connector;
2116}
2117
2118struct intel_shared_dpll *
2119intel_ddi_get_link_dpll(struct intel_dp *intel_dp, int clock)
2120{
2121	struct intel_connector *connector = intel_dp->attached_connector;
2122	struct intel_encoder *encoder = connector->encoder;
2123	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2124	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
2125	struct intel_shared_dpll *pll = NULL;
2126	struct intel_shared_dpll_config tmp_pll_config;
2127	enum intel_dpll_id dpll_id;
2128
2129	if (IS_BROXTON(dev_priv)) {
2130		dpll_id =  (enum intel_dpll_id)dig_port->port;
2131		/*
2132		 * Select the required PLL. This works for platforms where
2133		 * there is no shared DPLL.
2134		 */
2135		pll = &dev_priv->shared_dplls[dpll_id];
2136		if (WARN_ON(pll->active_mask)) {
2137
2138			DRM_ERROR("Shared DPLL in use. active_mask:%x\n",
2139				  pll->active_mask);
2140			return NULL;
2141		}
2142		tmp_pll_config = pll->config;
2143		if (!bxt_ddi_dp_set_dpll_hw_state(clock,
2144						  &pll->config.hw_state)) {
2145			DRM_ERROR("Could not setup DPLL\n");
2146			pll->config = tmp_pll_config;
2147			return NULL;
2148		}
2149	} else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
2150		pll = skl_find_link_pll(dev_priv, clock);
2151	} else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
2152		pll = hsw_ddi_dp_get_dpll(encoder, clock);
2153	}
2154	return pll;
2155}
2156
2157void intel_ddi_init(struct drm_device *dev, enum port port)
2158{
2159	struct drm_i915_private *dev_priv = to_i915(dev);
2160	struct intel_digital_port *intel_dig_port;
2161	struct intel_encoder *intel_encoder;
2162	struct drm_encoder *encoder;
2163	bool init_hdmi, init_dp, init_lspcon = false;
2164	int max_lanes;
2165
2166	if (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES) {
2167		switch (port) {
2168		case PORT_A:
2169			max_lanes = 4;
2170			break;
2171		case PORT_E:
2172			max_lanes = 0;
2173			break;
2174		default:
2175			max_lanes = 4;
2176			break;
2177		}
2178	} else {
2179		switch (port) {
2180		case PORT_A:
2181			max_lanes = 2;
2182			break;
2183		case PORT_E:
2184			max_lanes = 2;
2185			break;
2186		default:
2187			max_lanes = 4;
2188			break;
2189		}
2190	}
2191
2192	init_hdmi = (dev_priv->vbt.ddi_port_info[port].supports_dvi ||
2193		     dev_priv->vbt.ddi_port_info[port].supports_hdmi);
2194	init_dp = dev_priv->vbt.ddi_port_info[port].supports_dp;
2195
2196	if (intel_bios_is_lspcon_present(dev_priv, port)) {
2197		/*
2198		 * Lspcon device needs to be driven with DP connector
2199		 * with special detection sequence. So make sure DP
2200		 * is initialized before lspcon.
2201		 */
2202		init_dp = true;
2203		init_lspcon = true;
2204		init_hdmi = false;
2205		DRM_DEBUG_KMS("VBT says port %c has lspcon\n", port_name(port));
2206	}
2207
2208	if (!init_dp && !init_hdmi) {
2209		DRM_DEBUG_KMS("VBT says port %c is not DVI/HDMI/DP compatible, respect it\n",
2210			      port_name(port));
2211		return;
 
2212	}
2213
2214	intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
2215	if (!intel_dig_port)
2216		return;
2217
2218	intel_encoder = &intel_dig_port->base;
2219	encoder = &intel_encoder->base;
2220
2221	drm_encoder_init(dev, encoder, &intel_ddi_funcs,
2222			 DRM_MODE_ENCODER_TMDS, "DDI %c", port_name(port));
2223
2224	intel_encoder->compute_config = intel_ddi_compute_config;
 
2225	intel_encoder->enable = intel_enable_ddi;
2226	if (IS_BROXTON(dev_priv))
2227		intel_encoder->pre_pll_enable = bxt_ddi_pre_pll_enable;
2228	intel_encoder->pre_enable = intel_ddi_pre_enable;
2229	intel_encoder->disable = intel_disable_ddi;
2230	intel_encoder->post_disable = intel_ddi_post_disable;
2231	intel_encoder->get_hw_state = intel_ddi_get_hw_state;
2232	intel_encoder->get_config = intel_ddi_get_config;
2233	intel_encoder->suspend = intel_dp_encoder_suspend;
2234
2235	intel_dig_port->port = port;
2236	intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
2237					  (DDI_BUF_PORT_REVERSAL |
2238					   DDI_A_4_LANES);
2239
2240	/*
2241	 * Bspec says that DDI_A_4_LANES is the only supported configuration
2242	 * for Broxton.  Yet some BIOS fail to set this bit on port A if eDP
2243	 * wasn't lit up at boot.  Force this bit on in our internal
2244	 * configuration so that we use the proper lane count for our
2245	 * calculations.
2246	 */
2247	if (IS_BROXTON(dev_priv) && port == PORT_A) {
2248		if (!(intel_dig_port->saved_port_bits & DDI_A_4_LANES)) {
2249			DRM_DEBUG_KMS("BXT BIOS forgot to set DDI_A_4_LANES for port A; fixing\n");
2250			intel_dig_port->saved_port_bits |= DDI_A_4_LANES;
2251			max_lanes = 4;
2252		}
2253	}
2254
2255	intel_dig_port->max_lanes = max_lanes;
2256
2257	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
2258	intel_encoder->port = port;
2259	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
2260	intel_encoder->cloneable = 0;
 
2261
2262	if (init_dp) {
2263		if (!intel_ddi_init_dp_connector(intel_dig_port))
2264			goto err;
2265
2266		intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
2267		/*
2268		 * On BXT A0/A1, sw needs to activate DDIA HPD logic and
2269		 * interrupts to check the external panel connection.
2270		 */
2271		if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1) && port == PORT_B)
2272			dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
2273		else
2274			dev_priv->hotplug.irq_port[port] = intel_dig_port;
2275	}
2276
2277	/* In theory we don't need the encoder->type check, but leave it just in
2278	 * case we have some really bad VBTs... */
2279	if (intel_encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
2280		if (!intel_ddi_init_hdmi_connector(intel_dig_port))
2281			goto err;
2282	}
2283
2284	if (init_lspcon) {
2285		if (lspcon_init(intel_dig_port))
2286			/* TODO: handle hdmi info frame part */
2287			DRM_DEBUG_KMS("LSPCON init success on port %c\n",
2288				port_name(port));
2289		else
2290			/*
2291			 * LSPCON init faied, but DP init was success, so
2292			 * lets try to drive as DP++ port.
2293			 */
2294			DRM_ERROR("LSPCON init failed on port %c\n",
2295				port_name(port));
2296	}
2297
2298	return;
2299
2300err:
2301	drm_encoder_cleanup(encoder);
2302	kfree(intel_dig_port);
2303}
v3.15
   1/*
   2 * Copyright © 2012 Intel Corporation
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the next
  12 * paragraph) shall be included in all copies or substantial portions of the
  13 * Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21 * IN THE SOFTWARE.
  22 *
  23 * Authors:
  24 *    Eugeni Dodonov <eugeni.dodonov@intel.com>
  25 *
  26 */
  27
  28#include "i915_drv.h"
  29#include "intel_drv.h"
  30
 
 
 
 
 
 
  31/* HDMI/DVI modes ignore everything but the last 2 items. So we share
  32 * them for both DP and FDI transports, allowing those ports to
  33 * automatically adapt to HDMI connections as well
  34 */
  35static const u32 hsw_ddi_translations_dp[] = {
  36	0x00FFFFFF, 0x0006000E,		/* DP parameters */
  37	0x00D75FFF, 0x0005000A,
  38	0x00C30FFF, 0x00040006,
  39	0x80AAAFFF, 0x000B0000,
  40	0x00FFFFFF, 0x0005000A,
  41	0x00D75FFF, 0x000C0004,
  42	0x80C30FFF, 0x000B0000,
  43	0x00FFFFFF, 0x00040006,
  44	0x80D75FFF, 0x000B0000,
  45};
  46
  47static const u32 hsw_ddi_translations_fdi[] = {
  48	0x00FFFFFF, 0x0007000E,		/* FDI parameters */
  49	0x00D75FFF, 0x000F000A,
  50	0x00C30FFF, 0x00060006,
  51	0x00AAAFFF, 0x001E0000,
  52	0x00FFFFFF, 0x000F000A,
  53	0x00D75FFF, 0x00160004,
  54	0x00C30FFF, 0x001E0000,
  55	0x00FFFFFF, 0x00060006,
  56	0x00D75FFF, 0x001E0000,
  57};
  58
  59static const u32 hsw_ddi_translations_hdmi[] = {
  60				/* Idx	NT mV diff	T mV diff	db  */
  61	0x00FFFFFF, 0x0006000E, /* 0:	400		400		0   */
  62	0x00E79FFF, 0x000E000C, /* 1:	400		500		2   */
  63	0x00D75FFF, 0x0005000A, /* 2:	400		600		3.5 */
  64	0x00FFFFFF, 0x0005000A, /* 3:	600		600		0   */
  65	0x00E79FFF, 0x001D0007, /* 4:	600		750		2   */
  66	0x00D75FFF, 0x000C0004, /* 5:	600		900		3.5 */
  67	0x00FFFFFF, 0x00040006, /* 6:	800		800		0   */
  68	0x80E79FFF, 0x00030002, /* 7:	800		1000		2   */
  69	0x00FFFFFF, 0x00140005, /* 8:	850		850		0   */
  70	0x00FFFFFF, 0x000C0004, /* 9:	900		900		0   */
  71	0x00FFFFFF, 0x001C0003, /* 10:	950		950		0   */
  72	0x80FFFFFF, 0x00030002, /* 11:	1000		1000		0   */
  73};
  74
  75static const u32 bdw_ddi_translations_edp[] = {
  76	0x00FFFFFF, 0x00000012,		/* eDP parameters */
  77	0x00EBAFFF, 0x00020011,
  78	0x00C71FFF, 0x0006000F,
  79	0x00FFFFFF, 0x00020011,
  80	0x00DB6FFF, 0x0005000F,
  81	0x00BEEFFF, 0x000A000C,
  82	0x00FFFFFF, 0x0005000F,
  83	0x00DB6FFF, 0x000A000C,
  84	0x00FFFFFF, 0x000A000C,
  85	0x00FFFFFF, 0x00140006		/* HDMI parameters 800mV 0dB*/
  86};
  87
  88static const u32 bdw_ddi_translations_dp[] = {
  89	0x00FFFFFF, 0x0007000E,		/* DP parameters */
  90	0x00D75FFF, 0x000E000A,
  91	0x00BEFFFF, 0x00140006,
  92	0x00FFFFFF, 0x000E000A,
  93	0x00D75FFF, 0x00180004,
  94	0x80CB2FFF, 0x001B0002,
  95	0x00F7DFFF, 0x00180004,
  96	0x80D75FFF, 0x001B0002,
  97	0x80FFFFFF, 0x001B0002,
  98	0x00FFFFFF, 0x00140006		/* HDMI parameters 800mV 0dB*/
  99};
 100
 101static const u32 bdw_ddi_translations_fdi[] = {
 102	0x00FFFFFF, 0x0001000E,		/* FDI parameters */
 103	0x00D75FFF, 0x0004000A,
 104	0x00C30FFF, 0x00070006,
 105	0x00AAAFFF, 0x000C0000,
 106	0x00FFFFFF, 0x0004000A,
 107	0x00D75FFF, 0x00090004,
 108	0x00C30FFF, 0x000C0000,
 109	0x00FFFFFF, 0x00070006,
 110	0x00D75FFF, 0x000C0000,
 111	0x00FFFFFF, 0x00140006		/* HDMI parameters 800mV 0dB*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 112};
 113
 114enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 115{
 116	struct drm_encoder *encoder = &intel_encoder->base;
 117	int type = intel_encoder->type;
 
 118
 119	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP ||
 120	    type == INTEL_OUTPUT_HDMI || type == INTEL_OUTPUT_UNKNOWN) {
 121		struct intel_digital_port *intel_dig_port =
 122			enc_to_dig_port(encoder);
 123		return intel_dig_port->port;
 124
 125	} else if (type == INTEL_OUTPUT_ANALOG) {
 126		return PORT_E;
 127
 
 
 
 
 
 
 
 
 
 128	} else {
 129		DRM_ERROR("Invalid DDI encoder type %d\n", type);
 130		BUG();
 
 131	}
 
 
 
 
 
 
 
 132}
 133
 134/*
 135 * Starting with Haswell, DDI port buffers must be programmed with correct
 136 * values in advance. The buffer values are different for FDI and DP modes,
 137 * but the HDMI/DVI fields are shared among those. So we program the DDI
 138 * in either FDI or DP modes only, as HDMI connections will work with both
 139 * of those
 140 */
 141static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
 142{
 143	struct drm_i915_private *dev_priv = dev->dev_private;
 144	u32 reg;
 145	int i;
 146	int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
 147	const u32 *ddi_translations_fdi;
 148	const u32 *ddi_translations_dp;
 149	const u32 *ddi_translations_edp;
 150	const u32 *ddi_translations;
 
 
 
 151
 152	if (IS_BROADWELL(dev)) {
 
 
 
 
 
 
 
 
 
 
 
 
 153		ddi_translations_fdi = bdw_ddi_translations_fdi;
 154		ddi_translations_dp = bdw_ddi_translations_dp;
 155		ddi_translations_edp = bdw_ddi_translations_edp;
 156	} else if (IS_HASWELL(dev)) {
 
 157		ddi_translations_fdi = hsw_ddi_translations_fdi;
 158		ddi_translations_dp = hsw_ddi_translations_dp;
 159		ddi_translations_edp = hsw_ddi_translations_dp;
 
 160	} else {
 161		WARN(1, "ddi translation table missing\n");
 162		ddi_translations_edp = bdw_ddi_translations_dp;
 163		ddi_translations_fdi = bdw_ddi_translations_fdi;
 164		ddi_translations_dp = bdw_ddi_translations_dp;
 
 
 165	}
 166
 167	switch (port) {
 168	case PORT_A:
 
 
 
 
 
 
 
 
 
 
 
 169		ddi_translations = ddi_translations_edp;
 
 170		break;
 171	case PORT_B:
 172	case PORT_C:
 173		ddi_translations = ddi_translations_dp;
 
 174		break;
 175	case PORT_D:
 176		if (intel_dp_is_edp(dev, PORT_D))
 177			ddi_translations = ddi_translations_edp;
 178		else
 179			ddi_translations = ddi_translations_dp;
 180		break;
 181	case PORT_E:
 182		ddi_translations = ddi_translations_fdi;
 
 183		break;
 184	default:
 185		BUG();
 186	}
 187
 188	for (i = 0, reg = DDI_BUF_TRANS(port);
 189	     i < ARRAY_SIZE(hsw_ddi_translations_fdi); i++) {
 190		I915_WRITE(reg, ddi_translations[i]);
 191		reg += 4;
 192	}
 193	/* Entry 9 is for HDMI: */
 194	for (i = 0; i < 2; i++) {
 195		I915_WRITE(reg, hsw_ddi_translations_hdmi[hdmi_level * 2 + i]);
 196		reg += 4;
 197	}
 198}
 199
 200/* Program DDI buffers translations for DP. By default, program ports A-D in DP
 201 * mode and port E for FDI.
 
 
 202 */
 203void intel_prepare_ddi(struct drm_device *dev)
 204{
 205	int port;
 
 
 
 
 206
 207	if (!HAS_DDI(dev))
 208		return;
 209
 210	for (port = PORT_A; port <= PORT_E; port++)
 211		intel_prepare_ddi_buffers(dev, port);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 212}
 213
 214static const long hsw_ddi_buf_ctl_values[] = {
 215	DDI_BUF_EMP_400MV_0DB_HSW,
 216	DDI_BUF_EMP_400MV_3_5DB_HSW,
 217	DDI_BUF_EMP_400MV_6DB_HSW,
 218	DDI_BUF_EMP_400MV_9_5DB_HSW,
 219	DDI_BUF_EMP_600MV_0DB_HSW,
 220	DDI_BUF_EMP_600MV_3_5DB_HSW,
 221	DDI_BUF_EMP_600MV_6DB_HSW,
 222	DDI_BUF_EMP_800MV_0DB_HSW,
 223	DDI_BUF_EMP_800MV_3_5DB_HSW
 224};
 225
 226static void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
 227				    enum port port)
 228{
 229	uint32_t reg = DDI_BUF_CTL(port);
 230	int i;
 231
 232	for (i = 0; i < 8; i++) {
 233		udelay(1);
 234		if (I915_READ(reg) & DDI_BUF_IS_IDLE)
 235			return;
 236	}
 237	DRM_ERROR("Timeout waiting for DDI BUF %c idle bit\n", port_name(port));
 238}
 239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 240/* Starting with Haswell, different DDI ports can work in FDI mode for
 241 * connection to the PCH-located connectors. For this, it is necessary to train
 242 * both the DDI port and PCH receiver for the desired DDI buffer settings.
 243 *
 244 * The recommended port to work in FDI mode is DDI E, which we use here. Also,
 245 * please note that when FDI mode is active on DDI E, it shares 2 lines with
 246 * DDI A (which is used for eDP)
 247 */
 248
 249void hsw_fdi_link_train(struct drm_crtc *crtc)
 250{
 251	struct drm_device *dev = crtc->dev;
 252	struct drm_i915_private *dev_priv = dev->dev_private;
 253	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 254	u32 temp, i, rx_ctl_val;
 
 
 
 
 
 
 255
 256	/* Set the FDI_RX_MISC pwrdn lanes and the 2 workarounds listed at the
 257	 * mode set "sequence for CRT port" document:
 258	 * - TP1 to TP2 time with the default value
 259	 * - FDI delay to 90h
 260	 *
 261	 * WaFDIAutoLinkSetTimingOverrride:hsw
 262	 */
 263	I915_WRITE(_FDI_RXA_MISC, FDI_RX_PWRDN_LANE1_VAL(2) |
 264				  FDI_RX_PWRDN_LANE0_VAL(2) |
 265				  FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
 266
 267	/* Enable the PCH Receiver FDI PLL */
 268	rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE |
 269		     FDI_RX_PLL_ENABLE |
 270		     FDI_DP_PORT_WIDTH(intel_crtc->config.fdi_lanes);
 271	I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
 272	POSTING_READ(_FDI_RXA_CTL);
 273	udelay(220);
 274
 275	/* Switch from Rawclk to PCDclk */
 276	rx_ctl_val |= FDI_PCDCLK;
 277	I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
 278
 279	/* Configure Port Clock Select */
 280	I915_WRITE(PORT_CLK_SEL(PORT_E), intel_crtc->ddi_pll_sel);
 
 
 281
 282	/* Start the training iterating through available voltages and emphasis,
 283	 * testing each value twice. */
 284	for (i = 0; i < ARRAY_SIZE(hsw_ddi_buf_ctl_values) * 2; i++) {
 285		/* Configure DP_TP_CTL with auto-training */
 286		I915_WRITE(DP_TP_CTL(PORT_E),
 287					DP_TP_CTL_FDI_AUTOTRAIN |
 288					DP_TP_CTL_ENHANCED_FRAME_ENABLE |
 289					DP_TP_CTL_LINK_TRAIN_PAT1 |
 290					DP_TP_CTL_ENABLE);
 291
 292		/* Configure and enable DDI_BUF_CTL for DDI E with next voltage.
 293		 * DDI E does not support port reversal, the functionality is
 294		 * achieved on the PCH side in FDI_RX_CTL, so no need to set the
 295		 * port reversal bit */
 296		I915_WRITE(DDI_BUF_CTL(PORT_E),
 297			   DDI_BUF_CTL_ENABLE |
 298			   ((intel_crtc->config.fdi_lanes - 1) << 1) |
 299			   hsw_ddi_buf_ctl_values[i / 2]);
 300		POSTING_READ(DDI_BUF_CTL(PORT_E));
 301
 302		udelay(600);
 303
 304		/* Program PCH FDI Receiver TU */
 305		I915_WRITE(_FDI_RXA_TUSIZE1, TU_SIZE(64));
 306
 307		/* Enable PCH FDI Receiver with auto-training */
 308		rx_ctl_val |= FDI_RX_ENABLE | FDI_LINK_TRAIN_AUTO;
 309		I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
 310		POSTING_READ(_FDI_RXA_CTL);
 311
 312		/* Wait for FDI receiver lane calibration */
 313		udelay(30);
 314
 315		/* Unset FDI_RX_MISC pwrdn lanes */
 316		temp = I915_READ(_FDI_RXA_MISC);
 317		temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
 318		I915_WRITE(_FDI_RXA_MISC, temp);
 319		POSTING_READ(_FDI_RXA_MISC);
 320
 321		/* Wait for FDI auto training time */
 322		udelay(5);
 323
 324		temp = I915_READ(DP_TP_STATUS(PORT_E));
 325		if (temp & DP_TP_STATUS_AUTOTRAIN_DONE) {
 326			DRM_DEBUG_KMS("FDI link training done on step %d\n", i);
 
 
 327
 328			/* Enable normal pixel sending for FDI */
 329			I915_WRITE(DP_TP_CTL(PORT_E),
 330				   DP_TP_CTL_FDI_AUTOTRAIN |
 331				   DP_TP_CTL_LINK_TRAIN_NORMAL |
 332				   DP_TP_CTL_ENHANCED_FRAME_ENABLE |
 333				   DP_TP_CTL_ENABLE);
 
 
 334
 335			return;
 336		}
 
 337
 338		temp = I915_READ(DDI_BUF_CTL(PORT_E));
 339		temp &= ~DDI_BUF_CTL_ENABLE;
 340		I915_WRITE(DDI_BUF_CTL(PORT_E), temp);
 341		POSTING_READ(DDI_BUF_CTL(PORT_E));
 342
 343		/* Disable DP_TP_CTL and FDI_RX_CTL and retry */
 344		temp = I915_READ(DP_TP_CTL(PORT_E));
 345		temp &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
 346		temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
 347		I915_WRITE(DP_TP_CTL(PORT_E), temp);
 348		POSTING_READ(DP_TP_CTL(PORT_E));
 349
 350		intel_wait_ddi_buf_idle(dev_priv, PORT_E);
 351
 352		rx_ctl_val &= ~FDI_RX_ENABLE;
 353		I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
 354		POSTING_READ(_FDI_RXA_CTL);
 355
 356		/* Reset FDI_RX_MISC pwrdn lanes */
 357		temp = I915_READ(_FDI_RXA_MISC);
 358		temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
 359		temp |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
 360		I915_WRITE(_FDI_RXA_MISC, temp);
 361		POSTING_READ(_FDI_RXA_MISC);
 362	}
 363
 364	DRM_ERROR("FDI link training failed!\n");
 
 
 
 
 
 365}
 366
 367static void intel_ddi_mode_set(struct intel_encoder *encoder)
 368{
 369	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
 370	int port = intel_ddi_get_encoder_port(encoder);
 371	int pipe = crtc->pipe;
 372	int type = encoder->type;
 373	struct drm_display_mode *adjusted_mode = &crtc->config.adjusted_mode;
 374
 375	DRM_DEBUG_KMS("Preparing DDI mode on port %c, pipe %c\n",
 376		      port_name(port), pipe_name(pipe));
 377
 378	crtc->eld_vld = false;
 379	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
 380		struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
 381		struct intel_digital_port *intel_dig_port =
 382			enc_to_dig_port(&encoder->base);
 383
 384		intel_dp->DP = intel_dig_port->saved_port_bits |
 385			       DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
 386		intel_dp->DP |= DDI_PORT_WIDTH(intel_dp->lane_count);
 387
 388		if (intel_dp->has_audio) {
 389			DRM_DEBUG_DRIVER("DP audio on pipe %c on DDI\n",
 390					 pipe_name(crtc->pipe));
 391
 392			/* write eld */
 393			DRM_DEBUG_DRIVER("DP audio: write eld information\n");
 394			intel_write_eld(&encoder->base, adjusted_mode);
 395		}
 396	} else if (type == INTEL_OUTPUT_HDMI) {
 397		struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
 398
 399		if (intel_hdmi->has_audio) {
 400			/* Proper support for digital audio needs a new logic
 401			 * and a new set of registers, so we leave it for future
 402			 * patch bombing.
 403			 */
 404			DRM_DEBUG_DRIVER("HDMI audio on pipe %c on DDI\n",
 405					 pipe_name(crtc->pipe));
 406
 407			/* write eld */
 408			DRM_DEBUG_DRIVER("HDMI audio: write eld information\n");
 409			intel_write_eld(&encoder->base, adjusted_mode);
 410		}
 411
 412		intel_hdmi->set_infoframes(&encoder->base, adjusted_mode);
 413	}
 414}
 415
 416static struct intel_encoder *
 417intel_ddi_get_crtc_encoder(struct drm_crtc *crtc)
 418{
 419	struct drm_device *dev = crtc->dev;
 420	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 421	struct intel_encoder *intel_encoder, *ret = NULL;
 422	int num_encoders = 0;
 423
 424	for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
 425		ret = intel_encoder;
 426		num_encoders++;
 427	}
 428
 429	if (num_encoders != 1)
 430		WARN(1, "%d encoders on crtc for pipe %c\n", num_encoders,
 431		     pipe_name(intel_crtc->pipe));
 432
 433	BUG_ON(ret == NULL);
 434	return ret;
 435}
 436
 437void intel_ddi_put_crtc_pll(struct drm_crtc *crtc)
 
 438{
 439	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
 440	struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
 441	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 442	uint32_t val;
 
 
 
 
 
 
 
 
 
 443
 444	switch (intel_crtc->ddi_pll_sel) {
 445	case PORT_CLK_SEL_SPLL:
 446		plls->spll_refcount--;
 447		if (plls->spll_refcount == 0) {
 448			DRM_DEBUG_KMS("Disabling SPLL\n");
 449			val = I915_READ(SPLL_CTL);
 450			WARN_ON(!(val & SPLL_PLL_ENABLE));
 451			I915_WRITE(SPLL_CTL, val & ~SPLL_PLL_ENABLE);
 452			POSTING_READ(SPLL_CTL);
 453		}
 454		break;
 455	case PORT_CLK_SEL_WRPLL1:
 456		plls->wrpll1_refcount--;
 457		if (plls->wrpll1_refcount == 0) {
 458			DRM_DEBUG_KMS("Disabling WRPLL 1\n");
 459			val = I915_READ(WRPLL_CTL1);
 460			WARN_ON(!(val & WRPLL_PLL_ENABLE));
 461			I915_WRITE(WRPLL_CTL1, val & ~WRPLL_PLL_ENABLE);
 462			POSTING_READ(WRPLL_CTL1);
 463		}
 464		break;
 465	case PORT_CLK_SEL_WRPLL2:
 466		plls->wrpll2_refcount--;
 467		if (plls->wrpll2_refcount == 0) {
 468			DRM_DEBUG_KMS("Disabling WRPLL 2\n");
 469			val = I915_READ(WRPLL_CTL2);
 470			WARN_ON(!(val & WRPLL_PLL_ENABLE));
 471			I915_WRITE(WRPLL_CTL2, val & ~WRPLL_PLL_ENABLE);
 472			POSTING_READ(WRPLL_CTL2);
 473		}
 474		break;
 475	}
 476
 477	WARN(plls->spll_refcount < 0, "Invalid SPLL refcount\n");
 478	WARN(plls->wrpll1_refcount < 0, "Invalid WRPLL1 refcount\n");
 479	WARN(plls->wrpll2_refcount < 0, "Invalid WRPLL2 refcount\n");
 480
 481	intel_crtc->ddi_pll_sel = PORT_CLK_SEL_NONE;
 
 482}
 483
 484#define LC_FREQ 2700
 485#define LC_FREQ_2K (LC_FREQ * 2000)
 486
 487#define P_MIN 2
 488#define P_MAX 64
 489#define P_INC 2
 490
 491/* Constraints for PLL good behavior */
 492#define REF_MIN 48
 493#define REF_MAX 400
 494#define VCO_MIN 2400
 495#define VCO_MAX 4800
 496
 497#define ABS_DIFF(a, b) ((a > b) ? (a - b) : (b - a))
 498
 499struct wrpll_rnp {
 500	unsigned p, n2, r2;
 501};
 502
 503static unsigned wrpll_get_budget_for_freq(int clock)
 504{
 505	unsigned budget;
 506
 507	switch (clock) {
 508	case 25175000:
 509	case 25200000:
 510	case 27000000:
 511	case 27027000:
 512	case 37762500:
 513	case 37800000:
 514	case 40500000:
 515	case 40541000:
 516	case 54000000:
 517	case 54054000:
 518	case 59341000:
 519	case 59400000:
 520	case 72000000:
 521	case 74176000:
 522	case 74250000:
 523	case 81000000:
 524	case 81081000:
 525	case 89012000:
 526	case 89100000:
 527	case 108000000:
 528	case 108108000:
 529	case 111264000:
 530	case 111375000:
 531	case 148352000:
 532	case 148500000:
 533	case 162000000:
 534	case 162162000:
 535	case 222525000:
 536	case 222750000:
 537	case 296703000:
 538	case 297000000:
 539		budget = 0;
 540		break;
 541	case 233500000:
 542	case 245250000:
 543	case 247750000:
 544	case 253250000:
 545	case 298000000:
 546		budget = 1500;
 547		break;
 548	case 169128000:
 549	case 169500000:
 550	case 179500000:
 551	case 202000000:
 552		budget = 2000;
 553		break;
 554	case 256250000:
 555	case 262500000:
 556	case 270000000:
 557	case 272500000:
 558	case 273750000:
 559	case 280750000:
 560	case 281250000:
 561	case 286000000:
 562	case 291750000:
 563		budget = 4000;
 564		break;
 565	case 267250000:
 566	case 268500000:
 567		budget = 5000;
 568		break;
 569	default:
 570		budget = 1000;
 571		break;
 572	}
 573
 574	return budget;
 575}
 576
 577static void wrpll_update_rnp(uint64_t freq2k, unsigned budget,
 578			     unsigned r2, unsigned n2, unsigned p,
 579			     struct wrpll_rnp *best)
 580{
 581	uint64_t a, b, c, d, diff, diff_best;
 582
 583	/* No best (r,n,p) yet */
 584	if (best->p == 0) {
 585		best->p = p;
 586		best->n2 = n2;
 587		best->r2 = r2;
 588		return;
 589	}
 590
 591	/*
 592	 * Output clock is (LC_FREQ_2K / 2000) * N / (P * R), which compares to
 593	 * freq2k.
 594	 *
 595	 * delta = 1e6 *
 596	 *	   abs(freq2k - (LC_FREQ_2K * n2/(p * r2))) /
 597	 *	   freq2k;
 598	 *
 599	 * and we would like delta <= budget.
 600	 *
 601	 * If the discrepancy is above the PPM-based budget, always prefer to
 602	 * improve upon the previous solution.  However, if you're within the
 603	 * budget, try to maximize Ref * VCO, that is N / (P * R^2).
 604	 */
 605	a = freq2k * budget * p * r2;
 606	b = freq2k * budget * best->p * best->r2;
 607	diff = ABS_DIFF((freq2k * p * r2), (LC_FREQ_2K * n2));
 608	diff_best = ABS_DIFF((freq2k * best->p * best->r2),
 609			     (LC_FREQ_2K * best->n2));
 610	c = 1000000 * diff;
 611	d = 1000000 * diff_best;
 612
 613	if (a < c && b < d) {
 614		/* If both are above the budget, pick the closer */
 615		if (best->p * best->r2 * diff < p * r2 * diff_best) {
 616			best->p = p;
 617			best->n2 = n2;
 618			best->r2 = r2;
 619		}
 620	} else if (a >= c && b < d) {
 621		/* If A is below the threshold but B is above it?  Update. */
 622		best->p = p;
 623		best->n2 = n2;
 624		best->r2 = r2;
 625	} else if (a >= c && b >= d) {
 626		/* Both are below the limit, so pick the higher n2/(r2*r2) */
 627		if (n2 * best->r2 * best->r2 > best->n2 * r2 * r2) {
 628			best->p = p;
 629			best->n2 = n2;
 630			best->r2 = r2;
 631		}
 632	}
 633	/* Otherwise a < c && b >= d, do nothing */
 634}
 635
 636static int intel_ddi_calc_wrpll_link(struct drm_i915_private *dev_priv,
 637				     int reg)
 638{
 639	int refclk = LC_FREQ;
 640	int n, p, r;
 641	u32 wrpll;
 642
 643	wrpll = I915_READ(reg);
 644	switch (wrpll & SPLL_PLL_REF_MASK) {
 645	case SPLL_PLL_SSC:
 646	case SPLL_PLL_NON_SSC:
 647		/*
 648		 * We could calculate spread here, but our checking
 649		 * code only cares about 5% accuracy, and spread is a max of
 650		 * 0.5% downspread.
 651		 */
 652		refclk = 135;
 653		break;
 654	case SPLL_PLL_LCPLL:
 655		refclk = LC_FREQ;
 656		break;
 657	default:
 658		WARN(1, "bad wrpll refclk\n");
 659		return 0;
 660	}
 661
 662	r = wrpll & WRPLL_DIVIDER_REF_MASK;
 663	p = (wrpll & WRPLL_DIVIDER_POST_MASK) >> WRPLL_DIVIDER_POST_SHIFT;
 664	n = (wrpll & WRPLL_DIVIDER_FB_MASK) >> WRPLL_DIVIDER_FB_SHIFT;
 665
 666	/* Convert to KHz, p & r have a fixed point portion */
 667	return (refclk * n * 100) / (p * r);
 668}
 669
 670static void intel_ddi_clock_get(struct intel_encoder *encoder,
 671				struct intel_crtc_config *pipe_config)
 672{
 673	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
 674	enum port port = intel_ddi_get_encoder_port(encoder);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 675	int link_clock = 0;
 676	u32 val, pll;
 677
 678	val = I915_READ(PORT_CLK_SEL(port));
 679	switch (val & PORT_CLK_SEL_MASK) {
 680	case PORT_CLK_SEL_LCPLL_810:
 681		link_clock = 81000;
 682		break;
 683	case PORT_CLK_SEL_LCPLL_1350:
 684		link_clock = 135000;
 685		break;
 686	case PORT_CLK_SEL_LCPLL_2700:
 687		link_clock = 270000;
 688		break;
 689	case PORT_CLK_SEL_WRPLL1:
 690		link_clock = intel_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL1);
 691		break;
 692	case PORT_CLK_SEL_WRPLL2:
 693		link_clock = intel_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL2);
 694		break;
 695	case PORT_CLK_SEL_SPLL:
 696		pll = I915_READ(SPLL_CTL) & SPLL_PLL_FREQ_MASK;
 697		if (pll == SPLL_PLL_FREQ_810MHz)
 698			link_clock = 81000;
 699		else if (pll == SPLL_PLL_FREQ_1350MHz)
 700			link_clock = 135000;
 701		else if (pll == SPLL_PLL_FREQ_2700MHz)
 702			link_clock = 270000;
 703		else {
 704			WARN(1, "bad spll freq\n");
 705			return;
 706		}
 707		break;
 708	default:
 709		WARN(1, "bad port clock sel\n");
 710		return;
 711	}
 712
 713	pipe_config->port_clock = link_clock * 2;
 714
 715	if (pipe_config->has_pch_encoder)
 716		pipe_config->adjusted_mode.crtc_clock =
 717			intel_dotclock_calculate(pipe_config->port_clock,
 718						 &pipe_config->fdi_m_n);
 719	else if (pipe_config->has_dp_encoder)
 720		pipe_config->adjusted_mode.crtc_clock =
 721			intel_dotclock_calculate(pipe_config->port_clock,
 722						 &pipe_config->dp_m_n);
 723	else
 724		pipe_config->adjusted_mode.crtc_clock = pipe_config->port_clock;
 725}
 726
 727static void
 728intel_ddi_calculate_wrpll(int clock /* in Hz */,
 729			  unsigned *r2_out, unsigned *n2_out, unsigned *p_out)
 730{
 731	uint64_t freq2k;
 732	unsigned p, n2, r2;
 733	struct wrpll_rnp best = { 0, 0, 0 };
 734	unsigned budget;
 735
 736	freq2k = clock / 100;
 737
 738	budget = wrpll_get_budget_for_freq(clock);
 739
 740	/* Special case handling for 540 pixel clock: bypass WR PLL entirely
 741	 * and directly pass the LC PLL to it. */
 742	if (freq2k == 5400000) {
 743		*n2_out = 2;
 744		*p_out = 1;
 745		*r2_out = 2;
 746		return;
 747	}
 748
 749	/*
 750	 * Ref = LC_FREQ / R, where Ref is the actual reference input seen by
 751	 * the WR PLL.
 752	 *
 753	 * We want R so that REF_MIN <= Ref <= REF_MAX.
 754	 * Injecting R2 = 2 * R gives:
 755	 *   REF_MAX * r2 > LC_FREQ * 2 and
 756	 *   REF_MIN * r2 < LC_FREQ * 2
 757	 *
 758	 * Which means the desired boundaries for r2 are:
 759	 *  LC_FREQ * 2 / REF_MAX < r2 < LC_FREQ * 2 / REF_MIN
 760	 *
 761	 */
 762	for (r2 = LC_FREQ * 2 / REF_MAX + 1;
 763	     r2 <= LC_FREQ * 2 / REF_MIN;
 764	     r2++) {
 765
 766		/*
 767		 * VCO = N * Ref, that is: VCO = N * LC_FREQ / R
 768		 *
 769		 * Once again we want VCO_MIN <= VCO <= VCO_MAX.
 770		 * Injecting R2 = 2 * R and N2 = 2 * N, we get:
 771		 *   VCO_MAX * r2 > n2 * LC_FREQ and
 772		 *   VCO_MIN * r2 < n2 * LC_FREQ)
 773		 *
 774		 * Which means the desired boundaries for n2 are:
 775		 * VCO_MIN * r2 / LC_FREQ < n2 < VCO_MAX * r2 / LC_FREQ
 776		 */
 777		for (n2 = VCO_MIN * r2 / LC_FREQ + 1;
 778		     n2 <= VCO_MAX * r2 / LC_FREQ;
 779		     n2++) {
 780
 781			for (p = P_MIN; p <= P_MAX; p += P_INC)
 782				wrpll_update_rnp(freq2k, budget,
 783						 r2, n2, p, &best);
 784		}
 785	}
 786
 787	*n2_out = best.n2;
 788	*p_out = best.p;
 789	*r2_out = best.r2;
 790}
 791
 792/*
 793 * Tries to find a PLL for the CRTC. If it finds, it increases the refcount and
 794 * stores it in intel_crtc->ddi_pll_sel, so other mode sets won't be able to
 795 * steal the selected PLL. You need to call intel_ddi_pll_enable to actually
 796 * enable the PLL.
 797 */
 798bool intel_ddi_pll_select(struct intel_crtc *intel_crtc)
 799{
 800	struct drm_crtc *crtc = &intel_crtc->base;
 801	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
 802	struct drm_encoder *encoder = &intel_encoder->base;
 803	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
 804	struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
 805	int type = intel_encoder->type;
 806	enum pipe pipe = intel_crtc->pipe;
 807	int clock = intel_crtc->config.port_clock;
 808
 809	intel_ddi_put_crtc_pll(crtc);
 810
 811	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
 812		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
 813
 814		switch (intel_dp->link_bw) {
 815		case DP_LINK_BW_1_62:
 816			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_810;
 817			break;
 818		case DP_LINK_BW_2_7:
 819			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_1350;
 820			break;
 821		case DP_LINK_BW_5_4:
 822			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_LCPLL_2700;
 823			break;
 824		default:
 825			DRM_ERROR("Link bandwidth %d unsupported\n",
 826				  intel_dp->link_bw);
 827			return false;
 828		}
 829
 830	} else if (type == INTEL_OUTPUT_HDMI) {
 831		uint32_t reg, val;
 832		unsigned p, n2, r2;
 
 
 
 
 833
 834		intel_ddi_calculate_wrpll(clock * 1000, &r2, &n2, &p);
 
 
 
 
 
 835
 836		val = WRPLL_PLL_ENABLE | WRPLL_PLL_SELECT_LCPLL_2700 |
 837		      WRPLL_DIVIDER_REFERENCE(r2) | WRPLL_DIVIDER_FEEDBACK(n2) |
 838		      WRPLL_DIVIDER_POST(p);
 839
 840		if (val == I915_READ(WRPLL_CTL1)) {
 841			DRM_DEBUG_KMS("Reusing WRPLL 1 on pipe %c\n",
 842				      pipe_name(pipe));
 843			reg = WRPLL_CTL1;
 844		} else if (val == I915_READ(WRPLL_CTL2)) {
 845			DRM_DEBUG_KMS("Reusing WRPLL 2 on pipe %c\n",
 846				      pipe_name(pipe));
 847			reg = WRPLL_CTL2;
 848		} else if (plls->wrpll1_refcount == 0) {
 849			DRM_DEBUG_KMS("Using WRPLL 1 on pipe %c\n",
 850				      pipe_name(pipe));
 851			reg = WRPLL_CTL1;
 852		} else if (plls->wrpll2_refcount == 0) {
 853			DRM_DEBUG_KMS("Using WRPLL 2 on pipe %c\n",
 854				      pipe_name(pipe));
 855			reg = WRPLL_CTL2;
 856		} else {
 857			DRM_ERROR("No WRPLLs available!\n");
 858			return false;
 859		}
 860
 861		DRM_DEBUG_KMS("WRPLL: %dKHz refresh rate with p=%d, n2=%d r2=%d\n",
 862			      clock, p, n2, r2);
 863
 864		if (reg == WRPLL_CTL1) {
 865			plls->wrpll1_refcount++;
 866			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_WRPLL1;
 867		} else {
 868			plls->wrpll2_refcount++;
 869			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_WRPLL2;
 870		}
 871
 872	} else if (type == INTEL_OUTPUT_ANALOG) {
 873		if (plls->spll_refcount == 0) {
 874			DRM_DEBUG_KMS("Using SPLL on pipe %c\n",
 875				      pipe_name(pipe));
 876			plls->spll_refcount++;
 877			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_SPLL;
 878		} else {
 879			DRM_ERROR("SPLL already in use\n");
 880			return false;
 881		}
 882
 883	} else {
 884		WARN(1, "Invalid DDI encoder type %d\n", type);
 885		return false;
 886	}
 887
 888	return true;
 889}
 890
 
 
 
 
 
 
 
 
 891/*
 892 * To be called after intel_ddi_pll_select(). That one selects the PLL to be
 893 * used, this one actually enables the PLL.
 
 
 
 894 */
 895void intel_ddi_pll_enable(struct intel_crtc *crtc)
 
 896{
 897	struct drm_device *dev = crtc->base.dev;
 898	struct drm_i915_private *dev_priv = dev->dev_private;
 899	struct intel_ddi_plls *plls = &dev_priv->ddi_plls;
 900	int clock = crtc->config.port_clock;
 901	uint32_t reg, cur_val, new_val;
 902	int refcount;
 903	const char *pll_name;
 904	uint32_t enable_bit = (1 << 31);
 905	unsigned int p, n2, r2;
 906
 907	BUILD_BUG_ON(enable_bit != SPLL_PLL_ENABLE);
 908	BUILD_BUG_ON(enable_bit != WRPLL_PLL_ENABLE);
 909
 910	switch (crtc->ddi_pll_sel) {
 911	case PORT_CLK_SEL_LCPLL_2700:
 912	case PORT_CLK_SEL_LCPLL_1350:
 913	case PORT_CLK_SEL_LCPLL_810:
 914		/*
 915		 * LCPLL should always be enabled at this point of the mode set
 916		 * sequence, so nothing to do.
 917		 */
 918		return;
 919
 920	case PORT_CLK_SEL_SPLL:
 921		pll_name = "SPLL";
 922		reg = SPLL_CTL;
 923		refcount = plls->spll_refcount;
 924		new_val = SPLL_PLL_ENABLE | SPLL_PLL_FREQ_1350MHz |
 925			  SPLL_PLL_SSC;
 926		break;
 927
 928	case PORT_CLK_SEL_WRPLL1:
 929	case PORT_CLK_SEL_WRPLL2:
 930		if (crtc->ddi_pll_sel == PORT_CLK_SEL_WRPLL1) {
 931			pll_name = "WRPLL1";
 932			reg = WRPLL_CTL1;
 933			refcount = plls->wrpll1_refcount;
 934		} else {
 935			pll_name = "WRPLL2";
 936			reg = WRPLL_CTL2;
 937			refcount = plls->wrpll2_refcount;
 938		}
 939
 940		intel_ddi_calculate_wrpll(clock * 1000, &r2, &n2, &p);
 941
 942		new_val = WRPLL_PLL_ENABLE | WRPLL_PLL_SELECT_LCPLL_2700 |
 943			  WRPLL_DIVIDER_REFERENCE(r2) |
 944			  WRPLL_DIVIDER_FEEDBACK(n2) | WRPLL_DIVIDER_POST(p);
 945
 946		break;
 947
 948	case PORT_CLK_SEL_NONE:
 949		WARN(1, "Bad selected pll: PORT_CLK_SEL_NONE\n");
 950		return;
 951	default:
 952		WARN(1, "Bad selected pll: 0x%08x\n", crtc->ddi_pll_sel);
 953		return;
 954	}
 955
 956	cur_val = I915_READ(reg);
 957
 958	WARN(refcount < 1, "Bad %s refcount: %d\n", pll_name, refcount);
 959	if (refcount == 1) {
 960		WARN(cur_val & enable_bit, "%s already enabled\n", pll_name);
 961		I915_WRITE(reg, new_val);
 962		POSTING_READ(reg);
 963		udelay(20);
 964	} else {
 965		WARN((cur_val & enable_bit) == 0, "%s disabled\n", pll_name);
 966	}
 967}
 968
 969void intel_ddi_set_pipe_settings(struct drm_crtc *crtc)
 970{
 971	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
 972	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 973	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
 974	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
 975	int type = intel_encoder->type;
 976	uint32_t temp;
 977
 978	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
 
 979
 980		temp = TRANS_MSA_SYNC_CLK;
 981		switch (intel_crtc->config.pipe_bpp) {
 982		case 18:
 983			temp |= TRANS_MSA_6_BPC;
 984			break;
 985		case 24:
 986			temp |= TRANS_MSA_8_BPC;
 987			break;
 988		case 30:
 989			temp |= TRANS_MSA_10_BPC;
 990			break;
 991		case 36:
 992			temp |= TRANS_MSA_12_BPC;
 993			break;
 994		default:
 995			BUG();
 996		}
 997		I915_WRITE(TRANS_MSA_MISC(cpu_transcoder), temp);
 998	}
 999}
1000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1001void intel_ddi_enable_transcoder_func(struct drm_crtc *crtc)
1002{
1003	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1004	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1005	struct drm_encoder *encoder = &intel_encoder->base;
1006	struct drm_device *dev = crtc->dev;
1007	struct drm_i915_private *dev_priv = dev->dev_private;
1008	enum pipe pipe = intel_crtc->pipe;
1009	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
1010	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1011	int type = intel_encoder->type;
1012	uint32_t temp;
1013
1014	/* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
1015	temp = TRANS_DDI_FUNC_ENABLE;
1016	temp |= TRANS_DDI_SELECT_PORT(port);
1017
1018	switch (intel_crtc->config.pipe_bpp) {
1019	case 18:
1020		temp |= TRANS_DDI_BPC_6;
1021		break;
1022	case 24:
1023		temp |= TRANS_DDI_BPC_8;
1024		break;
1025	case 30:
1026		temp |= TRANS_DDI_BPC_10;
1027		break;
1028	case 36:
1029		temp |= TRANS_DDI_BPC_12;
1030		break;
1031	default:
1032		BUG();
1033	}
1034
1035	if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_PVSYNC)
1036		temp |= TRANS_DDI_PVSYNC;
1037	if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_PHSYNC)
1038		temp |= TRANS_DDI_PHSYNC;
1039
1040	if (cpu_transcoder == TRANSCODER_EDP) {
1041		switch (pipe) {
1042		case PIPE_A:
1043			/* On Haswell, can only use the always-on power well for
1044			 * eDP when not using the panel fitter, and when not
1045			 * using motion blur mitigation (which we don't
1046			 * support). */
1047			if (IS_HASWELL(dev) && intel_crtc->config.pch_pfit.enabled)
 
 
1048				temp |= TRANS_DDI_EDP_INPUT_A_ONOFF;
1049			else
1050				temp |= TRANS_DDI_EDP_INPUT_A_ON;
1051			break;
1052		case PIPE_B:
1053			temp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
1054			break;
1055		case PIPE_C:
1056			temp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
1057			break;
1058		default:
1059			BUG();
1060			break;
1061		}
1062	}
1063
1064	if (type == INTEL_OUTPUT_HDMI) {
1065		struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
1066
1067		if (intel_hdmi->has_hdmi_sink)
1068			temp |= TRANS_DDI_MODE_SELECT_HDMI;
1069		else
1070			temp |= TRANS_DDI_MODE_SELECT_DVI;
1071
1072	} else if (type == INTEL_OUTPUT_ANALOG) {
1073		temp |= TRANS_DDI_MODE_SELECT_FDI;
1074		temp |= (intel_crtc->config.fdi_lanes - 1) << 1;
1075
1076	} else if (type == INTEL_OUTPUT_DISPLAYPORT ||
1077		   type == INTEL_OUTPUT_EDP) {
1078		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1079
1080		temp |= TRANS_DDI_MODE_SELECT_DP_SST;
1081
1082		temp |= DDI_PORT_WIDTH(intel_dp->lane_count);
 
 
1083	} else {
1084		WARN(1, "Invalid encoder type %d for pipe %c\n",
1085		     intel_encoder->type, pipe_name(pipe));
1086	}
1087
1088	I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
1089}
1090
1091void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,
1092				       enum transcoder cpu_transcoder)
1093{
1094	uint32_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
1095	uint32_t val = I915_READ(reg);
1096
1097	val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK);
1098	val |= TRANS_DDI_PORT_NONE;
1099	I915_WRITE(reg, val);
1100}
1101
1102bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
1103{
1104	struct drm_device *dev = intel_connector->base.dev;
1105	struct drm_i915_private *dev_priv = dev->dev_private;
1106	struct intel_encoder *intel_encoder = intel_connector->encoder;
1107	int type = intel_connector->base.connector_type;
1108	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1109	enum pipe pipe = 0;
1110	enum transcoder cpu_transcoder;
1111	enum intel_display_power_domain power_domain;
1112	uint32_t tmp;
 
1113
1114	power_domain = intel_display_port_power_domain(intel_encoder);
1115	if (!intel_display_power_enabled(dev_priv, power_domain))
1116		return false;
1117
1118	if (!intel_encoder->get_hw_state(intel_encoder, &pipe))
1119		return false;
 
 
1120
1121	if (port == PORT_A)
1122		cpu_transcoder = TRANSCODER_EDP;
1123	else
1124		cpu_transcoder = (enum transcoder) pipe;
1125
1126	tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1127
1128	switch (tmp & TRANS_DDI_MODE_SELECT_MASK) {
1129	case TRANS_DDI_MODE_SELECT_HDMI:
1130	case TRANS_DDI_MODE_SELECT_DVI:
1131		return (type == DRM_MODE_CONNECTOR_HDMIA);
 
1132
1133	case TRANS_DDI_MODE_SELECT_DP_SST:
1134		if (type == DRM_MODE_CONNECTOR_eDP)
1135			return true;
 
 
1136	case TRANS_DDI_MODE_SELECT_DP_MST:
1137		return (type == DRM_MODE_CONNECTOR_DisplayPort);
 
 
 
1138
1139	case TRANS_DDI_MODE_SELECT_FDI:
1140		return (type == DRM_MODE_CONNECTOR_VGA);
 
1141
1142	default:
1143		return false;
 
1144	}
 
 
 
 
 
1145}
1146
1147bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
1148			    enum pipe *pipe)
1149{
1150	struct drm_device *dev = encoder->base.dev;
1151	struct drm_i915_private *dev_priv = dev->dev_private;
1152	enum port port = intel_ddi_get_encoder_port(encoder);
1153	enum intel_display_power_domain power_domain;
1154	u32 tmp;
1155	int i;
 
1156
1157	power_domain = intel_display_port_power_domain(encoder);
1158	if (!intel_display_power_enabled(dev_priv, power_domain))
1159		return false;
1160
 
 
1161	tmp = I915_READ(DDI_BUF_CTL(port));
1162
1163	if (!(tmp & DDI_BUF_CTL_ENABLE))
1164		return false;
1165
1166	if (port == PORT_A) {
1167		tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
1168
1169		switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
1170		case TRANS_DDI_EDP_INPUT_A_ON:
1171		case TRANS_DDI_EDP_INPUT_A_ONOFF:
1172			*pipe = PIPE_A;
1173			break;
1174		case TRANS_DDI_EDP_INPUT_B_ONOFF:
1175			*pipe = PIPE_B;
1176			break;
1177		case TRANS_DDI_EDP_INPUT_C_ONOFF:
1178			*pipe = PIPE_C;
1179			break;
1180		}
1181
1182		return true;
1183	} else {
1184		for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) {
1185			tmp = I915_READ(TRANS_DDI_FUNC_CTL(i));
 
 
 
 
 
 
 
 
 
 
 
1186
1187			if ((tmp & TRANS_DDI_PORT_MASK)
1188			    == TRANS_DDI_SELECT_PORT(port)) {
1189				*pipe = i;
1190				return true;
1191			}
1192		}
1193	}
1194
1195	DRM_DEBUG_KMS("No pipe for ddi port %c found\n", port_name(port));
1196
1197	return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1198}
1199
1200static uint32_t intel_ddi_get_crtc_pll(struct drm_i915_private *dev_priv,
1201				       enum pipe pipe)
1202{
1203	uint32_t temp, ret;
1204	enum port port = I915_MAX_PORTS;
1205	enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
1206								      pipe);
1207	int i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1208
1209	if (cpu_transcoder == TRANSCODER_EDP) {
1210		port = PORT_A;
 
 
 
 
 
 
 
1211	} else {
1212		temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1213		temp &= TRANS_DDI_PORT_MASK;
1214
1215		for (i = PORT_B; i <= PORT_E; i++)
1216			if (temp == TRANS_DDI_SELECT_PORT(i))
1217				port = i;
 
1218	}
1219
1220	if (port == I915_MAX_PORTS) {
1221		WARN(1, "Pipe %c enabled on an unknown port\n",
1222		     pipe_name(pipe));
1223		ret = PORT_CLK_SEL_NONE;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1224	} else {
1225		ret = I915_READ(PORT_CLK_SEL(port));
1226		DRM_DEBUG_KMS("Pipe %c connected to port %c using clock "
1227			      "0x%08x\n", pipe_name(pipe), port_name(port),
1228			      ret);
1229	}
1230
1231	return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1232}
1233
1234void intel_ddi_setup_hw_pll_state(struct drm_device *dev)
1235{
1236	struct drm_i915_private *dev_priv = dev->dev_private;
1237	enum pipe pipe;
1238	struct intel_crtc *intel_crtc;
1239
1240	dev_priv->ddi_plls.spll_refcount = 0;
1241	dev_priv->ddi_plls.wrpll1_refcount = 0;
1242	dev_priv->ddi_plls.wrpll2_refcount = 0;
1243
1244	for_each_pipe(pipe) {
1245		intel_crtc =
1246			to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
1247
1248		if (!intel_crtc->active) {
1249			intel_crtc->ddi_pll_sel = PORT_CLK_SEL_NONE;
1250			continue;
1251		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1252
1253		intel_crtc->ddi_pll_sel = intel_ddi_get_crtc_pll(dev_priv,
1254								 pipe);
 
 
 
 
1255
1256		switch (intel_crtc->ddi_pll_sel) {
1257		case PORT_CLK_SEL_SPLL:
1258			dev_priv->ddi_plls.spll_refcount++;
1259			break;
1260		case PORT_CLK_SEL_WRPLL1:
1261			dev_priv->ddi_plls.wrpll1_refcount++;
1262			break;
1263		case PORT_CLK_SEL_WRPLL2:
1264			dev_priv->ddi_plls.wrpll2_refcount++;
1265			break;
1266		}
1267	}
 
 
1268}
1269
1270void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc)
1271{
1272	struct drm_crtc *crtc = &intel_crtc->base;
1273	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
1274	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1275	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1276	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
 
 
 
 
 
 
 
 
 
 
1277
1278	if (cpu_transcoder != TRANSCODER_EDP)
1279		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
1280			   TRANS_CLK_SEL_PORT(port));
1281}
1282
1283void intel_ddi_disable_pipe_clock(struct intel_crtc *intel_crtc)
 
1284{
1285	struct drm_i915_private *dev_priv = intel_crtc->base.dev->dev_private;
1286	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
 
 
 
 
 
 
1287
1288	if (cpu_transcoder != TRANSCODER_EDP)
1289		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
1290			   TRANS_CLK_SEL_DISABLED);
 
 
 
 
 
 
 
 
 
 
1291}
1292
1293static void intel_ddi_pre_enable(struct intel_encoder *intel_encoder)
 
 
 
1294{
1295	struct drm_encoder *encoder = &intel_encoder->base;
1296	struct drm_crtc *crtc = encoder->crtc;
1297	struct drm_i915_private *dev_priv = encoder->dev->dev_private;
1298	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1299	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1300	int type = intel_encoder->type;
1301
1302	if (type == INTEL_OUTPUT_EDP) {
1303		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
 
1304		intel_edp_panel_on(intel_dp);
1305	}
1306
1307	WARN_ON(intel_crtc->ddi_pll_sel == PORT_CLK_SEL_NONE);
1308	I915_WRITE(PORT_CLK_SEL(port), intel_crtc->ddi_pll_sel);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1309
1310	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
1311		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1312
1313		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
1314		intel_dp_start_link_train(intel_dp);
1315		intel_dp_complete_link_train(intel_dp);
1316		if (port != PORT_A)
1317			intel_dp_stop_link_train(intel_dp);
 
 
 
 
 
 
 
 
1318	}
1319}
1320
1321static void intel_ddi_post_disable(struct intel_encoder *intel_encoder)
 
 
1322{
1323	struct drm_encoder *encoder = &intel_encoder->base;
1324	struct drm_i915_private *dev_priv = encoder->dev->dev_private;
1325	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1326	int type = intel_encoder->type;
1327	uint32_t val;
1328	bool wait = false;
1329
 
 
1330	val = I915_READ(DDI_BUF_CTL(port));
1331	if (val & DDI_BUF_CTL_ENABLE) {
1332		val &= ~DDI_BUF_CTL_ENABLE;
1333		I915_WRITE(DDI_BUF_CTL(port), val);
1334		wait = true;
1335	}
1336
1337	val = I915_READ(DP_TP_CTL(port));
1338	val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
1339	val |= DP_TP_CTL_LINK_TRAIN_PAT1;
1340	I915_WRITE(DP_TP_CTL(port), val);
1341
1342	if (wait)
1343		intel_wait_ddi_buf_idle(dev_priv, port);
1344
1345	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
1346		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1347		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
1348		intel_edp_panel_vdd_on(intel_dp);
1349		intel_edp_panel_off(intel_dp);
1350	}
1351
1352	I915_WRITE(PORT_CLK_SEL(port), PORT_CLK_SEL_NONE);
 
 
 
 
 
 
 
 
 
 
1353}
1354
1355static void intel_enable_ddi(struct intel_encoder *intel_encoder)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1356{
1357	struct drm_encoder *encoder = &intel_encoder->base;
1358	struct drm_crtc *crtc = encoder->crtc;
1359	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1360	int pipe = intel_crtc->pipe;
1361	struct drm_device *dev = encoder->dev;
1362	struct drm_i915_private *dev_priv = dev->dev_private;
1363	enum port port = intel_ddi_get_encoder_port(intel_encoder);
1364	int type = intel_encoder->type;
1365	uint32_t tmp;
1366
1367	if (type == INTEL_OUTPUT_HDMI) {
1368		struct intel_digital_port *intel_dig_port =
1369			enc_to_dig_port(encoder);
1370
1371		/* In HDMI/DVI mode, the port width, and swing/emphasis values
1372		 * are ignored so nothing special needs to be done besides
1373		 * enabling the port.
1374		 */
1375		I915_WRITE(DDI_BUF_CTL(port),
1376			   intel_dig_port->saved_port_bits |
1377			   DDI_BUF_CTL_ENABLE);
1378	} else if (type == INTEL_OUTPUT_EDP) {
1379		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1380
1381		if (port == PORT_A)
1382			intel_dp_stop_link_train(intel_dp);
1383
1384		intel_edp_backlight_on(intel_dp);
1385		intel_edp_psr_enable(intel_dp);
 
1386	}
1387
1388	if (intel_crtc->eld_vld && type != INTEL_OUTPUT_EDP) {
1389		tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
1390		tmp |= ((AUDIO_OUTPUT_ENABLE_A | AUDIO_ELD_VALID_A) << (pipe * 4));
1391		I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
1392	}
1393}
1394
1395static void intel_disable_ddi(struct intel_encoder *intel_encoder)
 
 
1396{
1397	struct drm_encoder *encoder = &intel_encoder->base;
1398	struct drm_crtc *crtc = encoder->crtc;
1399	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1400	int pipe = intel_crtc->pipe;
1401	int type = intel_encoder->type;
1402	struct drm_device *dev = encoder->dev;
1403	struct drm_i915_private *dev_priv = dev->dev_private;
1404	uint32_t tmp;
1405
1406	if (intel_crtc->eld_vld && type != INTEL_OUTPUT_EDP) {
1407		tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
1408		tmp &= ~((AUDIO_OUTPUT_ENABLE_A | AUDIO_ELD_VALID_A) <<
1409			 (pipe * 4));
1410		I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
1411	}
1412
1413	if (type == INTEL_OUTPUT_EDP) {
1414		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1415
1416		intel_edp_psr_disable(intel_dp);
 
1417		intel_edp_backlight_off(intel_dp);
1418	}
1419}
1420
1421int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv)
 
 
1422{
1423	struct drm_device *dev = dev_priv->dev;
1424	uint32_t lcpll = I915_READ(LCPLL_CTL);
1425	uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
1426
1427	if (lcpll & LCPLL_CD_SOURCE_FCLK) {
1428		return 800000;
1429	} else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT) {
1430		return 450000;
1431	} else if (freq == LCPLL_CLK_FREQ_450) {
1432		return 450000;
1433	} else if (IS_HASWELL(dev)) {
1434		if (IS_ULT(dev))
1435			return 337500;
1436		else
1437			return 540000;
1438	} else {
1439		if (freq == LCPLL_CLK_FREQ_54O_BDW)
1440			return 540000;
1441		else if (freq == LCPLL_CLK_FREQ_337_5_BDW)
1442			return 337500;
1443		else
1444			return 675000;
1445	}
1446}
1447
1448void intel_ddi_pll_init(struct drm_device *dev)
1449{
1450	struct drm_i915_private *dev_priv = dev->dev_private;
1451	uint32_t val = I915_READ(LCPLL_CTL);
1452
1453	/* The LCPLL register should be turned on by the BIOS. For now let's
1454	 * just check its state and print errors in case something is wrong.
1455	 * Don't even try to turn it on.
1456	 */
1457
1458	DRM_DEBUG_KMS("CDCLK running at %dKHz\n",
1459		      intel_ddi_get_cdclk_freq(dev_priv));
1460
1461	if (val & LCPLL_CD_SOURCE_FCLK)
1462		DRM_ERROR("CDCLK source is not LCPLL\n");
1463
1464	if (val & LCPLL_PLL_DISABLE)
1465		DRM_ERROR("LCPLL is disabled\n");
1466}
1467
1468void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
1469{
1470	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
1471	struct intel_dp *intel_dp = &intel_dig_port->dp;
1472	struct drm_i915_private *dev_priv = encoder->dev->dev_private;
1473	enum port port = intel_dig_port->port;
1474	uint32_t val;
1475	bool wait = false;
1476
1477	if (I915_READ(DP_TP_CTL(port)) & DP_TP_CTL_ENABLE) {
1478		val = I915_READ(DDI_BUF_CTL(port));
1479		if (val & DDI_BUF_CTL_ENABLE) {
1480			val &= ~DDI_BUF_CTL_ENABLE;
1481			I915_WRITE(DDI_BUF_CTL(port), val);
1482			wait = true;
1483		}
1484
1485		val = I915_READ(DP_TP_CTL(port));
1486		val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
1487		val |= DP_TP_CTL_LINK_TRAIN_PAT1;
1488		I915_WRITE(DP_TP_CTL(port), val);
1489		POSTING_READ(DP_TP_CTL(port));
1490
1491		if (wait)
1492			intel_wait_ddi_buf_idle(dev_priv, port);
1493	}
1494
1495	val = DP_TP_CTL_ENABLE | DP_TP_CTL_MODE_SST |
1496	      DP_TP_CTL_LINK_TRAIN_PAT1 | DP_TP_CTL_SCRAMBLE_DISABLE;
1497	if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
1498		val |= DP_TP_CTL_ENHANCED_FRAME_ENABLE;
 
 
 
 
 
1499	I915_WRITE(DP_TP_CTL(port), val);
1500	POSTING_READ(DP_TP_CTL(port));
1501
1502	intel_dp->DP |= DDI_BUF_CTL_ENABLE;
1503	I915_WRITE(DDI_BUF_CTL(port), intel_dp->DP);
1504	POSTING_READ(DDI_BUF_CTL(port));
1505
1506	udelay(600);
1507}
1508
1509void intel_ddi_fdi_disable(struct drm_crtc *crtc)
1510{
1511	struct drm_i915_private *dev_priv = crtc->dev->dev_private;
1512	struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1513	uint32_t val;
1514
1515	intel_ddi_post_disable(intel_encoder);
1516
1517	val = I915_READ(_FDI_RXA_CTL);
1518	val &= ~FDI_RX_ENABLE;
1519	I915_WRITE(_FDI_RXA_CTL, val);
1520
1521	val = I915_READ(_FDI_RXA_MISC);
1522	val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
1523	val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
1524	I915_WRITE(_FDI_RXA_MISC, val);
1525
1526	val = I915_READ(_FDI_RXA_CTL);
1527	val &= ~FDI_PCDCLK;
1528	I915_WRITE(_FDI_RXA_CTL, val);
1529
1530	val = I915_READ(_FDI_RXA_CTL);
1531	val &= ~FDI_RX_PLL_ENABLE;
1532	I915_WRITE(_FDI_RXA_CTL, val);
1533}
1534
1535static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder)
1536{
1537	struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
1538	int type = intel_encoder->type;
1539
1540	if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP)
1541		intel_dp_check_link_status(intel_dp);
1542}
1543
1544void intel_ddi_get_config(struct intel_encoder *encoder,
1545			  struct intel_crtc_config *pipe_config)
1546{
1547	struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1548	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1549	enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
 
1550	u32 temp, flags = 0;
1551
 
 
 
 
1552	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1553	if (temp & TRANS_DDI_PHSYNC)
1554		flags |= DRM_MODE_FLAG_PHSYNC;
1555	else
1556		flags |= DRM_MODE_FLAG_NHSYNC;
1557	if (temp & TRANS_DDI_PVSYNC)
1558		flags |= DRM_MODE_FLAG_PVSYNC;
1559	else
1560		flags |= DRM_MODE_FLAG_NVSYNC;
1561
1562	pipe_config->adjusted_mode.flags |= flags;
1563
1564	switch (temp & TRANS_DDI_BPC_MASK) {
1565	case TRANS_DDI_BPC_6:
1566		pipe_config->pipe_bpp = 18;
1567		break;
1568	case TRANS_DDI_BPC_8:
1569		pipe_config->pipe_bpp = 24;
1570		break;
1571	case TRANS_DDI_BPC_10:
1572		pipe_config->pipe_bpp = 30;
1573		break;
1574	case TRANS_DDI_BPC_12:
1575		pipe_config->pipe_bpp = 36;
1576		break;
1577	default:
1578		break;
1579	}
1580
1581	switch (temp & TRANS_DDI_MODE_SELECT_MASK) {
1582	case TRANS_DDI_MODE_SELECT_HDMI:
 
 
 
 
 
 
1583	case TRANS_DDI_MODE_SELECT_DVI:
 
 
1584	case TRANS_DDI_MODE_SELECT_FDI:
1585		break;
1586	case TRANS_DDI_MODE_SELECT_DP_SST:
1587	case TRANS_DDI_MODE_SELECT_DP_MST:
1588		pipe_config->has_dp_encoder = true;
 
1589		intel_dp_get_m_n(intel_crtc, pipe_config);
1590		break;
1591	default:
1592		break;
1593	}
1594
1595	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp_bpp &&
1596	    pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) {
 
 
 
 
 
 
1597		/*
1598		 * This is a big fat ugly hack.
1599		 *
1600		 * Some machines in UEFI boot mode provide us a VBT that has 18
1601		 * bpp and 1.62 GHz link bandwidth for eDP, which for reasons
1602		 * unknown we fail to light up. Yet the same BIOS boots up with
1603		 * 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as
1604		 * max, not what it tells us to use.
1605		 *
1606		 * Note: This will still be broken if the eDP panel is not lit
1607		 * up by the BIOS, and thus we can't get the mode at module
1608		 * load.
1609		 */
1610		DRM_DEBUG_KMS("pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n",
1611			      pipe_config->pipe_bpp, dev_priv->vbt.edp_bpp);
1612		dev_priv->vbt.edp_bpp = pipe_config->pipe_bpp;
1613	}
1614
1615	intel_ddi_clock_get(encoder, pipe_config);
1616}
1617
1618static void intel_ddi_destroy(struct drm_encoder *encoder)
1619{
1620	/* HDMI has nothing special to destroy, so we can go with this. */
1621	intel_dp_encoder_destroy(encoder);
1622}
1623
1624static bool intel_ddi_compute_config(struct intel_encoder *encoder,
1625				     struct intel_crtc_config *pipe_config)
 
1626{
 
1627	int type = encoder->type;
1628	int port = intel_ddi_get_encoder_port(encoder);
 
1629
1630	WARN(type == INTEL_OUTPUT_UNKNOWN, "compute_config() on unknown output!\n");
1631
1632	if (port == PORT_A)
1633		pipe_config->cpu_transcoder = TRANSCODER_EDP;
1634
1635	if (type == INTEL_OUTPUT_HDMI)
1636		return intel_hdmi_compute_config(encoder, pipe_config);
1637	else
1638		return intel_dp_compute_config(encoder, pipe_config);
 
 
 
 
 
 
 
 
1639}
1640
1641static const struct drm_encoder_funcs intel_ddi_funcs = {
1642	.destroy = intel_ddi_destroy,
 
1643};
1644
1645static struct intel_connector *
1646intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
1647{
1648	struct intel_connector *connector;
1649	enum port port = intel_dig_port->port;
1650
1651	connector = kzalloc(sizeof(*connector), GFP_KERNEL);
1652	if (!connector)
1653		return NULL;
1654
1655	intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
1656	if (!intel_dp_init_connector(intel_dig_port, connector)) {
1657		kfree(connector);
1658		return NULL;
1659	}
1660
1661	return connector;
1662}
1663
1664static struct intel_connector *
1665intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
1666{
1667	struct intel_connector *connector;
1668	enum port port = intel_dig_port->port;
1669
1670	connector = kzalloc(sizeof(*connector), GFP_KERNEL);
1671	if (!connector)
1672		return NULL;
1673
1674	intel_dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port);
1675	intel_hdmi_init_connector(intel_dig_port, connector);
1676
1677	return connector;
1678}
1679
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1680void intel_ddi_init(struct drm_device *dev, enum port port)
1681{
1682	struct drm_i915_private *dev_priv = dev->dev_private;
1683	struct intel_digital_port *intel_dig_port;
1684	struct intel_encoder *intel_encoder;
1685	struct drm_encoder *encoder;
1686	struct intel_connector *hdmi_connector = NULL;
1687	struct intel_connector *dp_connector = NULL;
1688	bool init_hdmi, init_dp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1689
1690	init_hdmi = (dev_priv->vbt.ddi_port_info[port].supports_dvi ||
1691		     dev_priv->vbt.ddi_port_info[port].supports_hdmi);
1692	init_dp = dev_priv->vbt.ddi_port_info[port].supports_dp;
 
 
 
 
 
 
 
 
 
 
 
 
 
1693	if (!init_dp && !init_hdmi) {
1694		DRM_DEBUG_KMS("VBT says port %c is not DVI/HDMI/DP compatible\n",
1695			      port_name(port));
1696		init_hdmi = true;
1697		init_dp = true;
1698	}
1699
1700	intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
1701	if (!intel_dig_port)
1702		return;
1703
1704	intel_encoder = &intel_dig_port->base;
1705	encoder = &intel_encoder->base;
1706
1707	drm_encoder_init(dev, encoder, &intel_ddi_funcs,
1708			 DRM_MODE_ENCODER_TMDS);
1709
1710	intel_encoder->compute_config = intel_ddi_compute_config;
1711	intel_encoder->mode_set = intel_ddi_mode_set;
1712	intel_encoder->enable = intel_enable_ddi;
 
 
1713	intel_encoder->pre_enable = intel_ddi_pre_enable;
1714	intel_encoder->disable = intel_disable_ddi;
1715	intel_encoder->post_disable = intel_ddi_post_disable;
1716	intel_encoder->get_hw_state = intel_ddi_get_hw_state;
1717	intel_encoder->get_config = intel_ddi_get_config;
 
1718
1719	intel_dig_port->port = port;
1720	intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
1721					  (DDI_BUF_PORT_REVERSAL |
1722					   DDI_A_4_LANES);
1723
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1724	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
1725	intel_encoder->crtc_mask =  (1 << 0) | (1 << 1) | (1 << 2);
 
1726	intel_encoder->cloneable = 0;
1727	intel_encoder->hot_plug = intel_ddi_hot_plug;
1728
1729	if (init_dp)
1730		dp_connector = intel_ddi_init_dp_connector(intel_dig_port);
 
 
 
 
 
 
 
 
 
 
 
 
1731
1732	/* In theory we don't need the encoder->type check, but leave it just in
1733	 * case we have some really bad VBTs... */
1734	if (intel_encoder->type != INTEL_OUTPUT_EDP && init_hdmi)
1735		hdmi_connector = intel_ddi_init_hdmi_connector(intel_dig_port);
 
 
1736
1737	if (!dp_connector && !hdmi_connector) {
1738		drm_encoder_cleanup(encoder);
1739		kfree(intel_dig_port);
 
 
 
 
 
 
 
 
 
1740	}
 
 
 
 
 
 
1741}