intel_audio.c 42.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * Copyright © 2014 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

I
Imre Deak 已提交
24
#include <linux/component.h>
25 26 27
#include <linux/kernel.h>

#include <drm/drm_edid.h>
I
Imre Deak 已提交
28
#include <drm/i915_component.h>
29 30

#include "i915_drv.h"
31
#include "intel_atomic.h"
32
#include "intel_audio.h"
33
#include "intel_cdclk.h"
34
#include "intel_display_types.h"
35
#include "intel_lpe_audio.h"
36

37 38 39 40 41 42 43 44 45 46 47
/**
 * DOC: High Definition Audio over HDMI and Display Port
 *
 * The graphics and audio drivers together support High Definition Audio over
 * HDMI and Display Port. The audio programming sequences are divided into audio
 * codec and controller enable and disable sequences. The graphics driver
 * handles the audio codec sequences, while the audio driver handles the audio
 * controller sequences.
 *
 * The disable sequences must be performed before disabling the transcoder or
 * port. The enable sequences may only be performed after enabling the
48 49
 * transcoder and port, and after completed link training. Therefore the audio
 * enable/disable sequences are part of the modeset sequence.
50 51 52 53 54 55 56
 *
 * The codec and controller sequences could be done either parallel or serial,
 * but generally the ELDV/PD change in the codec sequence indicates to the audio
 * driver that the controller sequence should start. Indeed, most of the
 * co-operation between the graphics and audio drivers is handled via audio
 * related registers. (The notable exception is the power management, not
 * covered here.)
57
 *
58 59
 * The struct &i915_audio_component is used to interact between the graphics
 * and audio drivers. The struct &i915_audio_component_ops @ops in it is
60
 * defined in graphics driver and called in audio driver. The
61
 * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver.
62 63
 */

64
/* DP N/M table */
65
#define LC_810M	810000
66 67 68 69 70 71 72 73 74 75 76
#define LC_540M	540000
#define LC_270M	270000
#define LC_162M	162000

struct dp_aud_n_m {
	int sample_rate;
	int clock;
	u16 m;
	u16 n;
};

77 78 79 80 81 82 83
struct hdmi_aud_ncts {
	int sample_rate;
	int clock;
	int n;
	int cts;
};

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
/* Values according to DP 1.4 Table 2-104 */
static const struct dp_aud_n_m dp_aud_n_m[] = {
	{ 32000, LC_162M, 1024, 10125 },
	{ 44100, LC_162M, 784, 5625 },
	{ 48000, LC_162M, 512, 3375 },
	{ 64000, LC_162M, 2048, 10125 },
	{ 88200, LC_162M, 1568, 5625 },
	{ 96000, LC_162M, 1024, 3375 },
	{ 128000, LC_162M, 4096, 10125 },
	{ 176400, LC_162M, 3136, 5625 },
	{ 192000, LC_162M, 2048, 3375 },
	{ 32000, LC_270M, 1024, 16875 },
	{ 44100, LC_270M, 784, 9375 },
	{ 48000, LC_270M, 512, 5625 },
	{ 64000, LC_270M, 2048, 16875 },
	{ 88200, LC_270M, 1568, 9375 },
	{ 96000, LC_270M, 1024, 5625 },
	{ 128000, LC_270M, 4096, 16875 },
	{ 176400, LC_270M, 3136, 9375 },
	{ 192000, LC_270M, 2048, 5625 },
	{ 32000, LC_540M, 1024, 33750 },
	{ 44100, LC_540M, 784, 18750 },
	{ 48000, LC_540M, 512, 11250 },
	{ 64000, LC_540M, 2048, 33750 },
	{ 88200, LC_540M, 1568, 18750 },
	{ 96000, LC_540M, 1024, 11250 },
	{ 128000, LC_540M, 4096, 33750 },
	{ 176400, LC_540M, 3136, 18750 },
	{ 192000, LC_540M, 2048, 11250 },
113 114 115 116 117 118 119 120 121
	{ 32000, LC_810M, 1024, 50625 },
	{ 44100, LC_810M, 784, 28125 },
	{ 48000, LC_810M, 512, 16875 },
	{ 64000, LC_810M, 2048, 50625 },
	{ 88200, LC_810M, 1568, 28125 },
	{ 96000, LC_810M, 1024, 16875 },
	{ 128000, LC_810M, 4096, 50625 },
	{ 176400, LC_810M, 3136, 28125 },
	{ 192000, LC_810M, 2048, 16875 },
122 123 124
};

static const struct dp_aud_n_m *
125
audio_config_dp_get_n_m(const struct intel_crtc_state *crtc_state, int rate)
126 127 128 129 130
{
	int i;

	for (i = 0; i < ARRAY_SIZE(dp_aud_n_m); i++) {
		if (rate == dp_aud_n_m[i].sample_rate &&
131
		    crtc_state->port_clock == dp_aud_n_m[i].clock)
132 133 134 135 136 137
			return &dp_aud_n_m[i];
	}

	return NULL;
}

138
static const struct {
139 140 141
	int clock;
	u32 config;
} hdmi_audio_clock[] = {
142
	{ 25175, AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 },
143 144
	{ 25200, AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 }, /* default per bspec */
	{ 27000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 },
145
	{ 27027, AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 },
146
	{ 54000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 },
147 148
	{ 54054, AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 },
	{ 74176, AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 },
149
	{ 74250, AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 },
150
	{ 148352, AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 },
151
	{ 148500, AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 },
152 153 154 155
	{ 296703, AUD_CONFIG_PIXEL_CLOCK_HDMI_296703 },
	{ 297000, AUD_CONFIG_PIXEL_CLOCK_HDMI_297000 },
	{ 593407, AUD_CONFIG_PIXEL_CLOCK_HDMI_593407 },
	{ 594000, AUD_CONFIG_PIXEL_CLOCK_HDMI_594000 },
156 157
};

158 159
/* HDMI N/CTS table */
#define TMDS_297M 297000
160
#define TMDS_296M 296703
161 162 163
#define TMDS_594M 594000
#define TMDS_593M 593407

164
static const struct hdmi_aud_ncts hdmi_aud_ncts_24bpp[] = {
165 166
	{ 32000, TMDS_296M, 5824, 421875 },
	{ 32000, TMDS_297M, 3072, 222750 },
167 168 169 170 171 172
	{ 32000, TMDS_593M, 5824, 843750 },
	{ 32000, TMDS_594M, 3072, 445500 },
	{ 44100, TMDS_296M, 4459, 234375 },
	{ 44100, TMDS_297M, 4704, 247500 },
	{ 44100, TMDS_593M, 8918, 937500 },
	{ 44100, TMDS_594M, 9408, 990000 },
173 174
	{ 88200, TMDS_296M, 8918, 234375 },
	{ 88200, TMDS_297M, 9408, 247500 },
175 176
	{ 88200, TMDS_593M, 17836, 937500 },
	{ 88200, TMDS_594M, 18816, 990000 },
177 178
	{ 176400, TMDS_296M, 17836, 234375 },
	{ 176400, TMDS_297M, 18816, 247500 },
179 180 181 182
	{ 176400, TMDS_593M, 35672, 937500 },
	{ 176400, TMDS_594M, 37632, 990000 },
	{ 48000, TMDS_296M, 5824, 281250 },
	{ 48000, TMDS_297M, 5120, 247500 },
183 184
	{ 48000, TMDS_593M, 5824, 562500 },
	{ 48000, TMDS_594M, 6144, 594000 },
185 186
	{ 96000, TMDS_296M, 11648, 281250 },
	{ 96000, TMDS_297M, 10240, 247500 },
187 188
	{ 96000, TMDS_593M, 11648, 562500 },
	{ 96000, TMDS_594M, 12288, 594000 },
189 190
	{ 192000, TMDS_296M, 23296, 281250 },
	{ 192000, TMDS_297M, 20480, 247500 },
191 192
	{ 192000, TMDS_593M, 23296, 562500 },
	{ 192000, TMDS_594M, 24576, 594000 },
193 194
};

195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
/* Appendix C - N & CTS values for deep color from HDMI 2.0 spec*/
/* HDMI N/CTS table for 10 bit deep color(30 bpp)*/
#define TMDS_371M 371250
#define TMDS_370M 370878

static const struct hdmi_aud_ncts hdmi_aud_ncts_30bpp[] = {
	{ 32000, TMDS_370M, 5824, 527344 },
	{ 32000, TMDS_371M, 6144, 556875 },
	{ 44100, TMDS_370M, 8918, 585938 },
	{ 44100, TMDS_371M, 4704, 309375 },
	{ 88200, TMDS_370M, 17836, 585938 },
	{ 88200, TMDS_371M, 9408, 309375 },
	{ 176400, TMDS_370M, 35672, 585938 },
	{ 176400, TMDS_371M, 18816, 309375 },
	{ 48000, TMDS_370M, 11648, 703125 },
	{ 48000, TMDS_371M, 5120, 309375 },
	{ 96000, TMDS_370M, 23296, 703125 },
	{ 96000, TMDS_371M, 10240, 309375 },
	{ 192000, TMDS_370M, 46592, 703125 },
	{ 192000, TMDS_371M, 20480, 309375 },
};

/* HDMI N/CTS table for 12 bit deep color(36 bpp)*/
#define TMDS_445_5M 445500
#define TMDS_445M 445054

static const struct hdmi_aud_ncts hdmi_aud_ncts_36bpp[] = {
	{ 32000, TMDS_445M, 5824, 632813 },
	{ 32000, TMDS_445_5M, 4096, 445500 },
	{ 44100, TMDS_445M, 8918, 703125 },
	{ 44100, TMDS_445_5M, 4704, 371250 },
	{ 88200, TMDS_445M, 17836, 703125 },
	{ 88200, TMDS_445_5M, 9408, 371250 },
	{ 176400, TMDS_445M, 35672, 703125 },
	{ 176400, TMDS_445_5M, 18816, 371250 },
	{ 48000, TMDS_445M, 5824, 421875 },
	{ 48000, TMDS_445_5M, 5120, 371250 },
	{ 96000, TMDS_445M, 11648, 421875 },
	{ 96000, TMDS_445_5M, 10240, 371250 },
	{ 192000, TMDS_445M, 23296, 421875 },
	{ 192000, TMDS_445_5M, 20480, 371250 },
};

238
/* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
239
static u32 audio_config_hdmi_pixel_clock(const struct intel_crtc_state *crtc_state)
240
{
241
	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
242
	const struct drm_display_mode *adjusted_mode =
243
		&crtc_state->hw.adjusted_mode;
244 245 246
	int i;

	for (i = 0; i < ARRAY_SIZE(hdmi_audio_clock); i++) {
247
		if (adjusted_mode->crtc_clock == hdmi_audio_clock[i].clock)
248 249 250
			break;
	}

251
	if (DISPLAY_VER(dev_priv) < 12 && adjusted_mode->crtc_clock > 148500)
252 253
		i = ARRAY_SIZE(hdmi_audio_clock);

254
	if (i == ARRAY_SIZE(hdmi_audio_clock)) {
255 256 257
		drm_dbg_kms(&dev_priv->drm,
			    "HDMI audio pixel clock setting for %d not found, falling back to defaults\n",
			    adjusted_mode->crtc_clock);
258 259 260
		i = 1;
	}

261 262 263 264
	drm_dbg_kms(&dev_priv->drm,
		    "Configuring HDMI audio for pixel clock %d (0x%08x)\n",
		    hdmi_audio_clock[i].clock,
		    hdmi_audio_clock[i].config);
265 266 267 268

	return hdmi_audio_clock[i].config;
}

269
static int audio_config_hdmi_get_n(const struct intel_crtc_state *crtc_state,
270
				   int rate)
271
{
272 273 274 275 276 277 278 279 280 281 282 283 284
	const struct hdmi_aud_ncts *hdmi_ncts_table;
	int i, size;

	if (crtc_state->pipe_bpp == 36) {
		hdmi_ncts_table = hdmi_aud_ncts_36bpp;
		size = ARRAY_SIZE(hdmi_aud_ncts_36bpp);
	} else if (crtc_state->pipe_bpp == 30) {
		hdmi_ncts_table = hdmi_aud_ncts_30bpp;
		size = ARRAY_SIZE(hdmi_aud_ncts_30bpp);
	} else {
		hdmi_ncts_table = hdmi_aud_ncts_24bpp;
		size = ARRAY_SIZE(hdmi_aud_ncts_24bpp);
	}
285

286 287 288 289
	for (i = 0; i < size; i++) {
		if (rate == hdmi_ncts_table[i].sample_rate &&
		    crtc_state->port_clock == hdmi_ncts_table[i].clock) {
			return hdmi_ncts_table[i].n;
290 291 292 293 294
		}
	}
	return 0;
}

295
static bool intel_eld_uptodate(struct drm_connector *connector,
296 297
			       i915_reg_t reg_eldv, u32 bits_eldv,
			       i915_reg_t reg_elda, u32 bits_elda,
298
			       i915_reg_t reg_edid)
299
{
300
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
301
	const u8 *eld = connector->eld;
302
	u32 tmp;
303
	int i;
304

305
	tmp = intel_de_read(dev_priv, reg_eldv);
306
	tmp &= bits_eldv;
307

308
	if (!tmp)
309 310
		return false;

311
	tmp = intel_de_read(dev_priv, reg_elda);
312
	tmp &= ~bits_elda;
313
	intel_de_write(dev_priv, reg_elda, tmp);
314

315
	for (i = 0; i < drm_eld_size(eld) / 4; i++)
316
		if (intel_de_read(dev_priv, reg_edid) != *((const u32 *)eld + i))
317 318 319 320 321
			return false;

	return true;
}

322 323 324
static void g4x_audio_codec_disable(struct intel_encoder *encoder,
				    const struct intel_crtc_state *old_crtc_state,
				    const struct drm_connector_state *old_conn_state)
325
{
326
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
327
	u32 eldv, tmp;
328

329
	drm_dbg_kms(&dev_priv->drm, "Disable audio codec\n");
330

331
	tmp = intel_de_read(dev_priv, G4X_AUD_VID_DID);
332 333 334 335 336 337
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	/* Invalidate ELD */
338
	tmp = intel_de_read(dev_priv, G4X_AUD_CNTL_ST);
339
	tmp &= ~eldv;
340
	intel_de_write(dev_priv, G4X_AUD_CNTL_ST, tmp);
341 342
}

343 344 345
static void g4x_audio_codec_enable(struct intel_encoder *encoder,
				   const struct intel_crtc_state *crtc_state,
				   const struct drm_connector_state *conn_state)
346
{
347 348
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
	struct drm_connector *connector = conn_state->connector;
349
	const u8 *eld = connector->eld;
350 351
	u32 eldv;
	u32 tmp;
352
	int len, i;
353

354 355
	drm_dbg_kms(&dev_priv->drm, "Enable audio codec, %u bytes ELD\n",
		    drm_eld_size(eld));
356

357
	tmp = intel_de_read(dev_priv, G4X_AUD_VID_DID);
358
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
359 360 361 362 363 364
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	if (intel_eld_uptodate(connector,
			       G4X_AUD_CNTL_ST, eldv,
365
			       G4X_AUD_CNTL_ST, G4X_ELD_ADDR_MASK,
366 367 368
			       G4X_HDMIW_HDMIEDID))
		return;

369
	tmp = intel_de_read(dev_priv, G4X_AUD_CNTL_ST);
370
	tmp &= ~(eldv | G4X_ELD_ADDR_MASK);
371
	len = (tmp >> 9) & 0x1f;		/* ELD buffer size */
372
	intel_de_write(dev_priv, G4X_AUD_CNTL_ST, tmp);
373

374
	len = min(drm_eld_size(eld) / 4, len);
375
	drm_dbg(&dev_priv->drm, "ELD size %d\n", len);
376
	for (i = 0; i < len; i++)
377 378
		intel_de_write(dev_priv, G4X_HDMIW_HDMIEDID,
			       *((const u32 *)eld + i));
379

380
	tmp = intel_de_read(dev_priv, G4X_AUD_CNTL_ST);
381
	tmp |= eldv;
382
	intel_de_write(dev_priv, G4X_AUD_CNTL_ST, tmp);
383 384
}

385
static void
386 387
hsw_dp_audio_config_update(struct intel_encoder *encoder,
			   const struct intel_crtc_state *crtc_state)
388
{
389
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
390
	struct i915_audio_component *acomp = dev_priv->audio_component;
391
	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
392 393 394
	enum port port = encoder->port;
	const struct dp_aud_n_m *nm;
	int rate;
395 396
	u32 tmp;

397 398
	rate = acomp ? acomp->aud_sample_rate[port] : 0;
	nm = audio_config_dp_get_n_m(crtc_state, rate);
399
	if (nm)
400 401
		drm_dbg_kms(&dev_priv->drm, "using Maud %u, Naud %u\n", nm->m,
			    nm->n);
402
	else
403
		drm_dbg_kms(&dev_priv->drm, "using automatic Maud, Naud\n");
404

405
	tmp = intel_de_read(dev_priv, HSW_AUD_CFG(cpu_transcoder));
406 407 408 409 410
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
	tmp |= AUD_CONFIG_N_VALUE_INDEX;

411 412 413 414 415 416
	if (nm) {
		tmp &= ~AUD_CONFIG_N_MASK;
		tmp |= AUD_CONFIG_N(nm->n);
		tmp |= AUD_CONFIG_N_PROG_ENABLE;
	}

417
	intel_de_write(dev_priv, HSW_AUD_CFG(cpu_transcoder), tmp);
418

419
	tmp = intel_de_read(dev_priv, HSW_AUD_M_CTS_ENABLE(cpu_transcoder));
420 421 422 423 424 425 426 427 428 429
	tmp &= ~AUD_CONFIG_M_MASK;
	tmp &= ~AUD_M_CTS_M_VALUE_INDEX;
	tmp &= ~AUD_M_CTS_M_PROG_ENABLE;

	if (nm) {
		tmp |= nm->m;
		tmp |= AUD_M_CTS_M_VALUE_INDEX;
		tmp |= AUD_M_CTS_M_PROG_ENABLE;
	}

430
	intel_de_write(dev_priv, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp);
431 432 433
}

static void
434 435
hsw_hdmi_audio_config_update(struct intel_encoder *encoder,
			     const struct intel_crtc_state *crtc_state)
436
{
437
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
438
	struct i915_audio_component *acomp = dev_priv->audio_component;
439
	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
440 441
	enum port port = encoder->port;
	int n, rate;
442 443
	u32 tmp;

444 445
	rate = acomp ? acomp->aud_sample_rate[port] : 0;

446
	tmp = intel_de_read(dev_priv, HSW_AUD_CFG(cpu_transcoder));
447 448 449
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
450
	tmp |= audio_config_hdmi_pixel_clock(crtc_state);
451

452
	n = audio_config_hdmi_get_n(crtc_state, rate);
453
	if (n != 0) {
454
		drm_dbg_kms(&dev_priv->drm, "using N %d\n", n);
455 456 457 458 459

		tmp &= ~AUD_CONFIG_N_MASK;
		tmp |= AUD_CONFIG_N(n);
		tmp |= AUD_CONFIG_N_PROG_ENABLE;
	} else {
460
		drm_dbg_kms(&dev_priv->drm, "using automatic N\n");
461 462
	}

463
	intel_de_write(dev_priv, HSW_AUD_CFG(cpu_transcoder), tmp);
464

465 466 467 468
	/*
	 * Let's disable "Enable CTS or M Prog bit"
	 * and let HW calculate the value
	 */
469
	tmp = intel_de_read(dev_priv, HSW_AUD_M_CTS_ENABLE(cpu_transcoder));
470
	tmp &= ~AUD_M_CTS_M_PROG_ENABLE;
471
	tmp &= ~AUD_M_CTS_M_VALUE_INDEX;
472
	intel_de_write(dev_priv, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp);
473 474
}

475
static void
476 477
hsw_audio_config_update(struct intel_encoder *encoder,
			const struct intel_crtc_state *crtc_state)
478
{
479 480
	if (intel_crtc_has_dp_encoder(crtc_state))
		hsw_dp_audio_config_update(encoder, crtc_state);
481
	else
482
		hsw_hdmi_audio_config_update(encoder, crtc_state);
483 484
}

485 486 487
static void hsw_audio_codec_disable(struct intel_encoder *encoder,
				    const struct intel_crtc_state *old_crtc_state,
				    const struct drm_connector_state *old_conn_state)
488
{
489
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
490
	enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
491
	u32 tmp;
492

493 494
	drm_dbg_kms(&dev_priv->drm, "Disable audio codec on transcoder %s\n",
		    transcoder_name(cpu_transcoder));
495

496 497
	mutex_lock(&dev_priv->av_mutex);

498
	/* Disable timestamps */
499
	tmp = intel_de_read(dev_priv, HSW_AUD_CFG(cpu_transcoder));
500 501 502 503
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
504
	if (intel_crtc_has_dp_encoder(old_crtc_state))
505
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
506
	intel_de_write(dev_priv, HSW_AUD_CFG(cpu_transcoder), tmp);
507 508

	/* Invalidate ELD */
509
	tmp = intel_de_read(dev_priv, HSW_AUD_PIN_ELD_CP_VLD);
510 511
	tmp &= ~AUDIO_ELD_VALID(cpu_transcoder);
	tmp &= ~AUDIO_OUTPUT_ENABLE(cpu_transcoder);
512
	intel_de_write(dev_priv, HSW_AUD_PIN_ELD_CP_VLD, tmp);
513 514

	mutex_unlock(&dev_priv->av_mutex);
515 516
}

517 518
static unsigned int calc_hblank_early_prog(struct intel_encoder *encoder,
					   const struct intel_crtc_state *crtc_state)
519 520 521 522
{
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
	unsigned int link_clks_available, link_clks_required;
	unsigned int tu_data, tu_line, link_clks_active;
523 524
	unsigned int h_active, h_total, hblank_delta, pixel_clk;
	unsigned int fec_coeff, cdclk, vdsc_bpp;
525
	unsigned int link_clk, lanes;
526
	unsigned int hblank_rise;
527 528 529 530 531 532 533 534

	h_active = crtc_state->hw.adjusted_mode.crtc_hdisplay;
	h_total = crtc_state->hw.adjusted_mode.crtc_htotal;
	pixel_clk = crtc_state->hw.adjusted_mode.crtc_clock;
	vdsc_bpp = crtc_state->dsc.compressed_bpp;
	cdclk = i915->cdclk.hw.cdclk;
	/* fec= 0.972261, using rounding multiplier of 1000000 */
	fec_coeff = 972261;
535 536
	link_clk = crtc_state->port_clock;
	lanes = crtc_state->lane_count;
537 538 539

	drm_dbg_kms(&i915->drm, "h_active = %u link_clk = %u :"
		    "lanes = %u vdsc_bpp = %u cdclk = %u\n",
540
		    h_active, link_clk, lanes, vdsc_bpp, cdclk);
541

542
	if (WARN_ON(!link_clk || !pixel_clk || !lanes || !vdsc_bpp || !cdclk))
543 544
		return 0;

545 546
	link_clks_available = (h_total - h_active) * link_clk / pixel_clk - 28;
	link_clks_required = DIV_ROUND_UP(192000 * h_total, 1000 * pixel_clk) * (48 / lanes + 2);
547 548 549 550

	if (link_clks_available > link_clks_required)
		hblank_delta = 32;
	else
551 552
		hblank_delta = DIV64_U64_ROUND_UP(mul_u32_u32(5 * (link_clk + cdclk), pixel_clk),
						  mul_u32_u32(link_clk, cdclk));
553

554 555 556 557 558
	tu_data = div64_u64(mul_u32_u32(pixel_clk * vdsc_bpp * 8, 1000000),
			    mul_u32_u32(link_clk * lanes, fec_coeff));
	tu_line = div64_u64(h_active * mul_u32_u32(link_clk, fec_coeff),
			    mul_u32_u32(64 * pixel_clk, 1000000));
	link_clks_active  = (tu_line - 1) * 64 + tu_data;
559

560
	hblank_rise = (link_clks_active + 6 * DIV_ROUND_UP(link_clks_active, 250) + 4) * pixel_clk / link_clk;
561

562
	return h_active - hblank_rise + hblank_delta;
563 564
}

565
static unsigned int calc_samples_room(const struct intel_crtc_state *crtc_state)
566 567
{
	unsigned int h_active, h_total, pixel_clk;
568
	unsigned int link_clk, lanes;
569 570 571 572

	h_active = crtc_state->hw.adjusted_mode.hdisplay;
	h_total = crtc_state->hw.adjusted_mode.htotal;
	pixel_clk = crtc_state->hw.adjusted_mode.clock;
573 574
	link_clk = crtc_state->port_clock;
	lanes = crtc_state->lane_count;
575

576 577
	return ((h_total - h_active) * link_clk - 12 * pixel_clk) /
		(pixel_clk * (48 / lanes + 2));
578 579 580 581 582 583 584 585
}

static void enable_audio_dsc_wa(struct intel_encoder *encoder,
				const struct intel_crtc_state *crtc_state)
{
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
	enum pipe pipe = crtc->pipe;
586
	unsigned int hblank_early_prog, samples_room;
587 588
	unsigned int val;

589
	if (DISPLAY_VER(i915) < 11)
590 591 592 593
		return;

	val = intel_de_read(i915, AUD_CONFIG_BE);

594
	if (IS_DISPLAY_VER(i915, 11))
595
		val |= HBLANK_EARLY_ENABLE_ICL(pipe);
596
	else if (DISPLAY_VER(i915) >= 12)
597 598 599 600 601 602
		val |= HBLANK_EARLY_ENABLE_TGL(pipe);

	if (crtc_state->dsc.compression_enable &&
	    (crtc_state->hw.adjusted_mode.hdisplay >= 3840 &&
	    crtc_state->hw.adjusted_mode.vdisplay >= 2160)) {
		/* Get hblank early enable value required */
603
		hblank_early_prog = calc_hblank_early_prog(encoder, crtc_state);
604 605 606 607 608 609 610 611 612 613 614 615 616 617 618
		if (hblank_early_prog < 32) {
			val &= ~HBLANK_START_COUNT_MASK(pipe);
			val |= HBLANK_START_COUNT(pipe, HBLANK_START_COUNT_32);
		} else if (hblank_early_prog < 64) {
			val &= ~HBLANK_START_COUNT_MASK(pipe);
			val |= HBLANK_START_COUNT(pipe, HBLANK_START_COUNT_64);
		} else if (hblank_early_prog < 96) {
			val &= ~HBLANK_START_COUNT_MASK(pipe);
			val |= HBLANK_START_COUNT(pipe, HBLANK_START_COUNT_96);
		} else {
			val &= ~HBLANK_START_COUNT_MASK(pipe);
			val |= HBLANK_START_COUNT(pipe, HBLANK_START_COUNT_128);
		}

		/* Get samples room value required */
619
		samples_room = calc_samples_room(crtc_state);
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634
		if (samples_room < 3) {
			val &= ~NUMBER_SAMPLES_PER_LINE_MASK(pipe);
			val |= NUMBER_SAMPLES_PER_LINE(pipe, samples_room);
		} else {
			/* Program 0 i.e "All Samples available in buffer" */
			val &= ~NUMBER_SAMPLES_PER_LINE_MASK(pipe);
			val |= NUMBER_SAMPLES_PER_LINE(pipe, 0x0);
		}
	}

	intel_de_write(i915, AUD_CONFIG_BE, val);
}

#undef ROUNDING_FACTOR

635 636 637
static void hsw_audio_codec_enable(struct intel_encoder *encoder,
				   const struct intel_crtc_state *crtc_state,
				   const struct drm_connector_state *conn_state)
638
{
639 640
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
	struct drm_connector *connector = conn_state->connector;
641
	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
642 643
	const u8 *eld = connector->eld;
	u32 tmp;
644
	int len, i;
645

646 647 648
	drm_dbg_kms(&dev_priv->drm,
		    "Enable audio codec on transcoder %s, %u bytes ELD\n",
		     transcoder_name(cpu_transcoder), drm_eld_size(eld));
649

650 651
	mutex_lock(&dev_priv->av_mutex);

652 653 654 655
	/* Enable Audio WA for 4k DSC usecases */
	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))
		enable_audio_dsc_wa(encoder, crtc_state);

656
	/* Enable audio presence detect, invalidate ELD */
657
	tmp = intel_de_read(dev_priv, HSW_AUD_PIN_ELD_CP_VLD);
658 659
	tmp |= AUDIO_OUTPUT_ENABLE(cpu_transcoder);
	tmp &= ~AUDIO_ELD_VALID(cpu_transcoder);
660
	intel_de_write(dev_priv, HSW_AUD_PIN_ELD_CP_VLD, tmp);
661

662 663 664 665 666 667
	/*
	 * FIXME: We're supposed to wait for vblank here, but we have vblanks
	 * disabled during the mode set. The proper fix would be to push the
	 * rest of the setup into a vblank work item, queued here, but the
	 * infrastructure is not there yet.
	 */
668

669
	/* Reset ELD write address */
670
	tmp = intel_de_read(dev_priv, HSW_AUD_DIP_ELD_CTRL(cpu_transcoder));
671
	tmp &= ~IBX_ELD_ADDRESS_MASK;
672
	intel_de_write(dev_priv, HSW_AUD_DIP_ELD_CTRL(cpu_transcoder), tmp);
673

674
	/* Up to 84 bytes of hw ELD buffer */
675 676
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
677 678
		intel_de_write(dev_priv, HSW_AUD_EDID_DATA(cpu_transcoder),
			       *((const u32 *)eld + i));
679

680
	/* ELD valid */
681
	tmp = intel_de_read(dev_priv, HSW_AUD_PIN_ELD_CP_VLD);
682
	tmp |= AUDIO_ELD_VALID(cpu_transcoder);
683
	intel_de_write(dev_priv, HSW_AUD_PIN_ELD_CP_VLD, tmp);
684 685

	/* Enable timestamps */
686
	hsw_audio_config_update(encoder, crtc_state);
687 688

	mutex_unlock(&dev_priv->av_mutex);
689 690
}

691 692 693
static void ilk_audio_codec_disable(struct intel_encoder *encoder,
				    const struct intel_crtc_state *old_crtc_state,
				    const struct drm_connector_state *old_conn_state)
694
{
695
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
696
	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
697 698
	enum pipe pipe = crtc->pipe;
	enum port port = encoder->port;
699
	u32 tmp, eldv;
700
	i915_reg_t aud_config, aud_cntrl_st2;
701

702 703 704 705
	drm_dbg_kms(&dev_priv->drm,
		    "Disable audio codec on [ENCODER:%d:%s], pipe %c\n",
		     encoder->base.base.id, encoder->base.name,
		     pipe_name(pipe));
706

707
	if (drm_WARN_ON(&dev_priv->drm, port == PORT_A))
708 709
		return;

710
	if (HAS_PCH_IBX(dev_priv)) {
711 712
		aud_config = IBX_AUD_CFG(pipe);
		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
713
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
714 715 716 717 718 719 720 721
		aud_config = VLV_AUD_CFG(pipe);
		aud_cntrl_st2 = VLV_AUD_CNTL_ST2;
	} else {
		aud_config = CPT_AUD_CFG(pipe);
		aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
	}

	/* Disable timestamps */
722
	tmp = intel_de_read(dev_priv, aud_config);
723 724 725 726
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
727
	if (intel_crtc_has_dp_encoder(old_crtc_state))
728
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
729
	intel_de_write(dev_priv, aud_config, tmp);
730

731
	eldv = IBX_ELD_VALID(port);
732 733

	/* Invalidate ELD */
734
	tmp = intel_de_read(dev_priv, aud_cntrl_st2);
735
	tmp &= ~eldv;
736
	intel_de_write(dev_priv, aud_cntrl_st2, tmp);
737 738
}

739 740 741
static void ilk_audio_codec_enable(struct intel_encoder *encoder,
				   const struct intel_crtc_state *crtc_state,
				   const struct drm_connector_state *conn_state)
742
{
743
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
744
	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
745 746 747
	struct drm_connector *connector = conn_state->connector;
	enum pipe pipe = crtc->pipe;
	enum port port = encoder->port;
748
	const u8 *eld = connector->eld;
749
	u32 tmp, eldv;
750
	int len, i;
751
	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
752

753 754 755 756
	drm_dbg_kms(&dev_priv->drm,
		    "Enable audio codec on [ENCODER:%d:%s], pipe %c, %u bytes ELD\n",
		    encoder->base.base.id, encoder->base.name,
		    pipe_name(pipe), drm_eld_size(eld));
757

758
	if (drm_WARN_ON(&dev_priv->drm, port == PORT_A))
759 760
		return;

761 762 763 764 765 766
	/*
	 * FIXME: We're supposed to wait for vblank here, but we have vblanks
	 * disabled during the mode set. The proper fix would be to push the
	 * rest of the setup into a vblank work item, queued here, but the
	 * infrastructure is not there yet.
	 */
767

768
	if (HAS_PCH_IBX(dev_priv)) {
769 770 771 772
		hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID(pipe);
		aud_config = IBX_AUD_CFG(pipe);
		aud_cntl_st = IBX_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
773 774
	} else if (IS_VALLEYVIEW(dev_priv) ||
		   IS_CHERRYVIEW(dev_priv)) {
775 776 777 778 779 780 781 782 783 784 785
		hdmiw_hdmiedid = VLV_HDMIW_HDMIEDID(pipe);
		aud_config = VLV_AUD_CFG(pipe);
		aud_cntl_st = VLV_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = VLV_AUD_CNTL_ST2;
	} else {
		hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID(pipe);
		aud_config = CPT_AUD_CFG(pipe);
		aud_cntl_st = CPT_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
	}

786
	eldv = IBX_ELD_VALID(port);
787

788
	/* Invalidate ELD */
789
	tmp = intel_de_read(dev_priv, aud_cntrl_st2);
790
	tmp &= ~eldv;
791
	intel_de_write(dev_priv, aud_cntrl_st2, tmp);
792

793
	/* Reset ELD write address */
794
	tmp = intel_de_read(dev_priv, aud_cntl_st);
795
	tmp &= ~IBX_ELD_ADDRESS_MASK;
796
	intel_de_write(dev_priv, aud_cntl_st, tmp);
797

798
	/* Up to 84 bytes of hw ELD buffer */
799 800
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
801 802
		intel_de_write(dev_priv, hdmiw_hdmiedid,
			       *((const u32 *)eld + i));
803

804
	/* ELD valid */
805
	tmp = intel_de_read(dev_priv, aud_cntrl_st2);
806
	tmp |= eldv;
807
	intel_de_write(dev_priv, aud_cntrl_st2, tmp);
808 809

	/* Enable timestamps */
810
	tmp = intel_de_read(dev_priv, aud_config);
811 812 813
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
814
	if (intel_crtc_has_dp_encoder(crtc_state))
815 816
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	else
817
		tmp |= audio_config_hdmi_pixel_clock(crtc_state);
818
	intel_de_write(dev_priv, aud_config, tmp);
819 820
}

821 822
/**
 * intel_audio_codec_enable - Enable the audio codec for HD audio
823
 * @encoder: encoder on which to enable audio
824 825
 * @crtc_state: pointer to the current crtc state.
 * @conn_state: pointer to the current connector state.
826 827 828 829
 *
 * The enable sequences may only be performed after enabling the transcoder and
 * port, and after completed link training.
 */
830
void intel_audio_codec_enable(struct intel_encoder *encoder,
831 832
			      const struct intel_crtc_state *crtc_state,
			      const struct drm_connector_state *conn_state)
833
{
834
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
835
	struct i915_audio_component *acomp = dev_priv->audio_component;
836
	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
837 838
	struct drm_connector *connector = conn_state->connector;
	const struct drm_display_mode *adjusted_mode =
839
		&crtc_state->hw.adjusted_mode;
840 841
	enum port port = encoder->port;
	enum pipe pipe = crtc->pipe;
842

843
	/* FIXME precompute the ELD in .compute_config() */
844
	if (!connector->eld[0])
845 846 847
		drm_dbg_kms(&dev_priv->drm,
			    "Bogus ELD on [CONNECTOR:%d:%s]\n",
			    connector->base.id, connector->name);
848

849 850 851 852 853
	drm_dbg(&dev_priv->drm, "ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
		connector->base.id,
		connector->name,
		encoder->base.base.id,
		encoder->base.name);
854

855
	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
856

857
	if (dev_priv->display.audio_codec_enable)
858 859 860
		dev_priv->display.audio_codec_enable(encoder,
						     crtc_state,
						     conn_state);
861

862
	mutex_lock(&dev_priv->av_mutex);
863
	encoder->audio_connector = connector;
864

865
	/* referred in audio callbacks */
866
	dev_priv->av_enc_map[pipe] = encoder;
867 868
	mutex_unlock(&dev_priv->av_mutex);

869 870
	if (acomp && acomp->base.audio_ops &&
	    acomp->base.audio_ops->pin_eld_notify) {
871
		/* audio drivers expect pipe = -1 to indicate Non-MST cases */
872
		if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST))
873
			pipe = -1;
874
		acomp->base.audio_ops->pin_eld_notify(acomp->base.audio_ops->audio_ptr,
875
						 (int) port, (int) pipe);
876 877
	}

878
	intel_lpe_audio_notify(dev_priv, pipe, port, connector->eld,
879
			       crtc_state->port_clock,
880
			       intel_crtc_has_dp_encoder(crtc_state));
881 882 883 884
}

/**
 * intel_audio_codec_disable - Disable the audio codec for HD audio
885
 * @encoder: encoder on which to disable audio
886 887
 * @old_crtc_state: pointer to the old crtc state.
 * @old_conn_state: pointer to the old connector state.
888 889 890 891
 *
 * The disable sequences must be performed before disabling the transcoder or
 * port.
 */
892 893 894
void intel_audio_codec_disable(struct intel_encoder *encoder,
			       const struct intel_crtc_state *old_crtc_state,
			       const struct drm_connector_state *old_conn_state)
895
{
896
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
897
	struct i915_audio_component *acomp = dev_priv->audio_component;
898
	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
899
	enum port port = encoder->port;
900
	enum pipe pipe = crtc->pipe;
901 902

	if (dev_priv->display.audio_codec_disable)
903 904 905
		dev_priv->display.audio_codec_disable(encoder,
						      old_crtc_state,
						      old_conn_state);
906

907
	mutex_lock(&dev_priv->av_mutex);
908
	encoder->audio_connector = NULL;
909
	dev_priv->av_enc_map[pipe] = NULL;
910 911
	mutex_unlock(&dev_priv->av_mutex);

912 913
	if (acomp && acomp->base.audio_ops &&
	    acomp->base.audio_ops->pin_eld_notify) {
914
		/* audio drivers expect pipe = -1 to indicate Non-MST cases */
915
		if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
916
			pipe = -1;
917
		acomp->base.audio_ops->pin_eld_notify(acomp->base.audio_ops->audio_ptr,
918
						 (int) port, (int) pipe);
919
	}
920

921
	intel_lpe_audio_notify(dev_priv, pipe, port, NULL, 0, false);
922 923 924
}

/**
925 926
 * intel_init_audio_hooks - Set up chip specific audio hooks
 * @dev_priv: device private
927
 */
928
void intel_init_audio_hooks(struct drm_i915_private *dev_priv)
929
{
930
	if (IS_G4X(dev_priv)) {
931
		dev_priv->display.audio_codec_enable = g4x_audio_codec_enable;
932
		dev_priv->display.audio_codec_disable = g4x_audio_codec_disable;
933
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
934
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
935
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
936
	} else if (IS_HASWELL(dev_priv) || DISPLAY_VER(dev_priv) >= 8) {
937 938
		dev_priv->display.audio_codec_enable = hsw_audio_codec_enable;
		dev_priv->display.audio_codec_disable = hsw_audio_codec_disable;
939
	} else if (HAS_PCH_SPLIT(dev_priv)) {
940
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
941
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
942
	}
943
}
I
Imre Deak 已提交
944

945
static int glk_force_audio_cdclk_commit(struct intel_atomic_state *state,
946
					struct intel_crtc *crtc,
947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965
					bool enable)
{
	struct intel_cdclk_state *cdclk_state;
	int ret;

	/* need to hold at least one crtc lock for the global state */
	ret = drm_modeset_lock(&crtc->base.mutex, state->base.acquire_ctx);
	if (ret)
		return ret;

	cdclk_state = intel_atomic_get_cdclk_state(state);
	if (IS_ERR(cdclk_state))
		return PTR_ERR(cdclk_state);

	cdclk_state->force_min_cdclk = enable ? 2 * 96000 : 0;

	return drm_atomic_commit(&state->base);
}

966 967 968 969 970
static void glk_force_audio_cdclk(struct drm_i915_private *dev_priv,
				  bool enable)
{
	struct drm_modeset_acquire_ctx ctx;
	struct drm_atomic_state *state;
971
	struct intel_crtc *crtc;
972 973
	int ret;

974
	crtc = intel_get_first_crtc(dev_priv);
975 976 977
	if (!crtc)
		return;

978 979
	drm_modeset_acquire_init(&ctx, 0);
	state = drm_atomic_state_alloc(&dev_priv->drm);
980
	if (drm_WARN_ON(&dev_priv->drm, !state))
981 982 983 984 985
		return;

	state->acquire_ctx = &ctx;

retry:
986 987
	ret = glk_force_audio_cdclk_commit(to_intel_atomic_state(state), crtc,
					   enable);
988 989 990 991 992 993
	if (ret == -EDEADLK) {
		drm_atomic_state_clear(state);
		drm_modeset_backoff(&ctx);
		goto retry;
	}

994
	drm_WARN_ON(&dev_priv->drm, ret);
995 996 997 998 999 1000 1001

	drm_atomic_state_put(state);

	drm_modeset_drop_locks(&ctx);
	drm_modeset_acquire_fini(&ctx);
}

1002
static unsigned long i915_audio_component_get_power(struct device *kdev)
I
Imre Deak 已提交
1003
{
1004 1005 1006
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
	intel_wakeref_t ret;

1007 1008 1009
	/* Catch potential impedance mismatches before they occur! */
	BUILD_BUG_ON(sizeof(intel_wakeref_t) > sizeof(unsigned long));

1010 1011
	ret = intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);

1012
	if (dev_priv->audio_power_refcount++ == 0) {
1013
		if (DISPLAY_VER(dev_priv) >= 9) {
1014 1015
			intel_de_write(dev_priv, AUD_FREQ_CNTRL,
				       dev_priv->audio_freq_cntrl);
1016 1017 1018
			drm_dbg_kms(&dev_priv->drm,
				    "restored AUD_FREQ_CNTRL to 0x%x\n",
				    dev_priv->audio_freq_cntrl);
1019 1020 1021
		}

		/* Force CDCLK to 2*BCLK as long as we need audio powered. */
1022
		if (IS_GEMINILAKE(dev_priv))
1023
			glk_force_audio_cdclk(dev_priv, true);
1024

1025
		if (DISPLAY_VER(dev_priv) >= 10)
1026 1027
			intel_de_write(dev_priv, AUD_PIN_BUF_CTL,
				       (intel_de_read(dev_priv, AUD_PIN_BUF_CTL) | AUD_PIN_BUF_ENABLE));
1028
	}
1029 1030

	return ret;
I
Imre Deak 已提交
1031 1032
}

1033 1034
static void i915_audio_component_put_power(struct device *kdev,
					   unsigned long cookie)
I
Imre Deak 已提交
1035
{
1036 1037 1038 1039
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);

	/* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */
	if (--dev_priv->audio_power_refcount == 0)
1040
		if (IS_GEMINILAKE(dev_priv))
1041 1042 1043
			glk_force_audio_cdclk(dev_priv, false);

	intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie);
I
Imre Deak 已提交
1044 1045
}

1046
static void i915_audio_component_codec_wake_override(struct device *kdev,
1047 1048
						     bool enable)
{
1049
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
1050
	unsigned long cookie;
1051 1052
	u32 tmp;

1053
	if (DISPLAY_VER(dev_priv) < 9)
1054 1055
		return;

1056
	cookie = i915_audio_component_get_power(kdev);
1057

1058 1059 1060 1061
	/*
	 * Enable/disable generating the codec wake signal, overriding the
	 * internal logic to generate the codec wake to controller.
	 */
1062
	tmp = intel_de_read(dev_priv, HSW_AUD_CHICKENBIT);
1063
	tmp &= ~SKL_AUD_CODEC_WAKE_SIGNAL;
1064
	intel_de_write(dev_priv, HSW_AUD_CHICKENBIT, tmp);
1065 1066 1067
	usleep_range(1000, 1500);

	if (enable) {
1068
		tmp = intel_de_read(dev_priv, HSW_AUD_CHICKENBIT);
1069
		tmp |= SKL_AUD_CODEC_WAKE_SIGNAL;
1070
		intel_de_write(dev_priv, HSW_AUD_CHICKENBIT, tmp);
1071 1072
		usleep_range(1000, 1500);
	}
1073

1074
	i915_audio_component_put_power(kdev, cookie);
1075 1076
}

I
Imre Deak 已提交
1077
/* Get CDCLK in kHz  */
1078
static int i915_audio_component_get_cdclk_freq(struct device *kdev)
I
Imre Deak 已提交
1079
{
1080
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
I
Imre Deak 已提交
1081

1082
	if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_DDI(dev_priv)))
I
Imre Deak 已提交
1083 1084
		return -ENODEV;

1085
	return dev_priv->cdclk.hw.cdclk;
I
Imre Deak 已提交
1086 1087
}

1088 1089 1090 1091 1092 1093 1094 1095 1096 1097
/*
 * get the intel_encoder according to the parameter port and pipe
 * intel_encoder is saved by the index of pipe
 * MST & (pipe >= 0): return the av_enc_map[pipe],
 *   when port is matched
 * MST & (pipe < 0): this is invalid
 * Non-MST & (pipe >= 0): only pipe = 0 (the first device entry)
 *   will get the right intel_encoder with port matched
 * Non-MST & (pipe < 0): get the right intel_encoder with port matched
 */
1098 1099 1100
static struct intel_encoder *get_saved_enc(struct drm_i915_private *dev_priv,
					       int port, int pipe)
{
1101
	struct intel_encoder *encoder;
1102 1103

	/* MST */
1104
	if (pipe >= 0) {
1105 1106
		if (drm_WARN_ON(&dev_priv->drm,
				pipe >= ARRAY_SIZE(dev_priv->av_enc_map)))
1107 1108
			return NULL;

1109 1110 1111 1112 1113 1114 1115 1116 1117 1118
		encoder = dev_priv->av_enc_map[pipe];
		/*
		 * when bootup, audio driver may not know it is
		 * MST or not. So it will poll all the port & pipe
		 * combinations
		 */
		if (encoder != NULL && encoder->port == port &&
		    encoder->type == INTEL_OUTPUT_DP_MST)
			return encoder;
	}
1119 1120

	/* Non-MST */
1121 1122
	if (pipe > 0)
		return NULL;
1123

1124
	for_each_pipe(dev_priv, pipe) {
1125 1126 1127 1128
		encoder = dev_priv->av_enc_map[pipe];
		if (encoder == NULL)
			continue;

1129 1130 1131
		if (encoder->type == INTEL_OUTPUT_DP_MST)
			continue;

1132 1133 1134 1135 1136 1137 1138 1139 1140
		if (port == encoder->port)
			return encoder;
	}

	return NULL;
}

static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
						int pipe, int rate)
1141
{
1142
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
1143
	struct i915_audio_component *acomp = dev_priv->audio_component;
1144 1145
	struct intel_encoder *encoder;
	struct intel_crtc *crtc;
1146
	unsigned long cookie;
1147
	int err = 0;
1148

1149
	if (!HAS_DDI(dev_priv))
1150 1151
		return 0;

1152
	cookie = i915_audio_component_get_power(kdev);
1153
	mutex_lock(&dev_priv->av_mutex);
1154

1155
	/* 1. get the pipe */
1156 1157
	encoder = get_saved_enc(dev_priv, port, pipe);
	if (!encoder || !encoder->base.crtc) {
1158 1159
		drm_dbg_kms(&dev_priv->drm, "Not valid for port %c\n",
			    port_name(port));
1160 1161
		err = -ENODEV;
		goto unlock;
1162
	}
1163

1164
	crtc = to_intel_crtc(encoder->base.crtc);
1165

1166 1167 1168
	/* port must be valid now, otherwise the pipe will be invalid */
	acomp->aud_sample_rate[port] = rate;

1169
	hsw_audio_config_update(encoder, crtc->config);
1170

1171
 unlock:
1172
	mutex_unlock(&dev_priv->av_mutex);
1173
	i915_audio_component_put_power(kdev, cookie);
1174
	return err;
1175 1176
}

1177
static int i915_audio_component_get_eld(struct device *kdev, int port,
1178
					int pipe, bool *enabled,
1179 1180
					unsigned char *buf, int max_bytes)
{
1181
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
1182 1183 1184 1185 1186
	struct intel_encoder *intel_encoder;
	const u8 *eld;
	int ret = -EINVAL;

	mutex_lock(&dev_priv->av_mutex);
1187 1188 1189

	intel_encoder = get_saved_enc(dev_priv, port, pipe);
	if (!intel_encoder) {
1190 1191
		drm_dbg_kms(&dev_priv->drm, "Not valid for port %c\n",
			    port_name(port));
1192 1193 1194 1195 1196 1197 1198 1199 1200 1201
		mutex_unlock(&dev_priv->av_mutex);
		return ret;
	}

	ret = 0;
	*enabled = intel_encoder->audio_connector != NULL;
	if (*enabled) {
		eld = intel_encoder->audio_connector->eld;
		ret = drm_eld_size(eld);
		memcpy(buf, eld, min(max_bytes, ret));
1202 1203 1204 1205
	}

	mutex_unlock(&dev_priv->av_mutex);
	return ret;
1206 1207
}

1208
static const struct drm_audio_component_ops i915_audio_component_ops = {
I
Imre Deak 已提交
1209 1210 1211
	.owner		= THIS_MODULE,
	.get_power	= i915_audio_component_get_power,
	.put_power	= i915_audio_component_put_power,
1212
	.codec_wake_override = i915_audio_component_codec_wake_override,
I
Imre Deak 已提交
1213
	.get_cdclk_freq	= i915_audio_component_get_cdclk_freq,
1214
	.sync_audio_rate = i915_audio_component_sync_audio_rate,
1215
	.get_eld	= i915_audio_component_get_eld,
I
Imre Deak 已提交
1216 1217
};

1218 1219
static int i915_audio_component_bind(struct device *i915_kdev,
				     struct device *hda_kdev, void *data)
I
Imre Deak 已提交
1220 1221
{
	struct i915_audio_component *acomp = data;
1222
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
1223
	int i;
I
Imre Deak 已提交
1224

1225
	if (drm_WARN_ON(&dev_priv->drm, acomp->base.ops || acomp->base.dev))
I
Imre Deak 已提交
1226 1227
		return -EEXIST;

1228 1229 1230
	if (drm_WARN_ON(&dev_priv->drm,
			!device_link_add(hda_kdev, i915_kdev,
					 DL_FLAG_STATELESS)))
1231 1232
		return -ENOMEM;

1233
	drm_modeset_lock_all(&dev_priv->drm);
1234 1235
	acomp->base.ops = &i915_audio_component_ops;
	acomp->base.dev = i915_kdev;
1236 1237 1238
	BUILD_BUG_ON(MAX_PORTS != I915_MAX_PORTS);
	for (i = 0; i < ARRAY_SIZE(acomp->aud_sample_rate); i++)
		acomp->aud_sample_rate[i] = 0;
1239
	dev_priv->audio_component = acomp;
1240
	drm_modeset_unlock_all(&dev_priv->drm);
I
Imre Deak 已提交
1241 1242 1243 1244

	return 0;
}

1245 1246
static void i915_audio_component_unbind(struct device *i915_kdev,
					struct device *hda_kdev, void *data)
I
Imre Deak 已提交
1247 1248
{
	struct i915_audio_component *acomp = data;
1249
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
I
Imre Deak 已提交
1250

1251
	drm_modeset_lock_all(&dev_priv->drm);
1252 1253
	acomp->base.ops = NULL;
	acomp->base.dev = NULL;
1254
	dev_priv->audio_component = NULL;
1255
	drm_modeset_unlock_all(&dev_priv->drm);
1256 1257

	device_link_remove(hda_kdev, i915_kdev);
1258 1259 1260 1261

	if (dev_priv->audio_power_refcount)
		drm_err(&dev_priv->drm, "audio power refcount %d after unbind\n",
			dev_priv->audio_power_refcount);
I
Imre Deak 已提交
1262 1263 1264 1265 1266 1267 1268
}

static const struct component_ops i915_audio_component_bind_ops = {
	.bind	= i915_audio_component_bind,
	.unbind	= i915_audio_component_unbind,
};

1269 1270 1271 1272 1273 1274 1275 1276 1277
#define AUD_FREQ_TMODE_SHIFT	14
#define AUD_FREQ_4T		0
#define AUD_FREQ_8T		(2 << AUD_FREQ_TMODE_SHIFT)
#define AUD_FREQ_PULLCLKS(x)	(((x) & 0x3) << 11)
#define AUD_FREQ_BCLK_96M	BIT(4)

#define AUD_FREQ_GEN12          (AUD_FREQ_8T | AUD_FREQ_PULLCLKS(0) | AUD_FREQ_BCLK_96M)
#define AUD_FREQ_TGL_BROKEN     (AUD_FREQ_8T | AUD_FREQ_PULLCLKS(2) | AUD_FREQ_BCLK_96M)

I
Imre Deak 已提交
1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293
/**
 * i915_audio_component_init - initialize and register the audio component
 * @dev_priv: i915 device instance
 *
 * This will register with the component framework a child component which
 * will bind dynamically to the snd_hda_intel driver's corresponding master
 * component when the latter is registered. During binding the child
 * initializes an instance of struct i915_audio_component which it receives
 * from the master. The master can then start to use the interface defined by
 * this struct. Each side can break the binding at any point by deregistering
 * its own component after which each side's component unbind callback is
 * called.
 *
 * We ignore any error during registration and continue with reduced
 * functionality (i.e. without HDMI audio).
 */
1294
static void i915_audio_component_init(struct drm_i915_private *dev_priv)
I
Imre Deak 已提交
1295
{
1296
	u32 aud_freq, aud_freq_init;
I
Imre Deak 已提交
1297 1298
	int ret;

1299 1300 1301
	ret = component_add_typed(dev_priv->drm.dev,
				  &i915_audio_component_bind_ops,
				  I915_COMPONENT_AUDIO);
I
Imre Deak 已提交
1302
	if (ret < 0) {
1303 1304
		drm_err(&dev_priv->drm,
			"failed to add audio component (%d)\n", ret);
I
Imre Deak 已提交
1305 1306 1307 1308
		/* continue with reduced functionality */
		return;
	}

1309
	if (DISPLAY_VER(dev_priv) >= 9) {
1310 1311
		aud_freq_init = intel_de_read(dev_priv, AUD_FREQ_CNTRL);

1312
		if (DISPLAY_VER(dev_priv) >= 12)
1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324
			aud_freq = AUD_FREQ_GEN12;
		else
			aud_freq = aud_freq_init;

		/* use BIOS provided value for TGL unless it is a known bad value */
		if (IS_TIGERLAKE(dev_priv) && aud_freq_init != AUD_FREQ_TGL_BROKEN)
			aud_freq = aud_freq_init;

		drm_dbg_kms(&dev_priv->drm, "use AUD_FREQ_CNTRL of 0x%x (init value 0x%x)\n",
			    aud_freq, aud_freq_init);

		dev_priv->audio_freq_cntrl = aud_freq;
1325 1326
	}

I
Imre Deak 已提交
1327 1328 1329 1330 1331 1332 1333 1334 1335 1336
	dev_priv->audio_component_registered = true;
}

/**
 * i915_audio_component_cleanup - deregister the audio component
 * @dev_priv: i915 device instance
 *
 * Deregisters the audio component, breaking any existing binding to the
 * corresponding snd_hda_intel driver's master component.
 */
1337
static void i915_audio_component_cleanup(struct drm_i915_private *dev_priv)
I
Imre Deak 已提交
1338 1339 1340 1341
{
	if (!dev_priv->audio_component_registered)
		return;

1342
	component_del(dev_priv->drm.dev, &i915_audio_component_bind_ops);
I
Imre Deak 已提交
1343 1344
	dev_priv->audio_component_registered = false;
}
1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369

/**
 * intel_audio_init() - Initialize the audio driver either using
 * component framework or using lpe audio bridge
 * @dev_priv: the i915 drm device private data
 *
 */
void intel_audio_init(struct drm_i915_private *dev_priv)
{
	if (intel_lpe_audio_init(dev_priv) < 0)
		i915_audio_component_init(dev_priv);
}

/**
 * intel_audio_deinit() - deinitialize the audio driver
 * @dev_priv: the i915 drm device private data
 *
 */
void intel_audio_deinit(struct drm_i915_private *dev_priv)
{
	if ((dev_priv)->lpe_audio.platdev != NULL)
		intel_lpe_audio_teardown(dev_priv);
	else
		i915_audio_component_cleanup(dev_priv);
}