intel_audio.c 27.4 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 24
/*
 * 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.
 */

#include <linux/kernel.h>
I
Imre Deak 已提交
25 26 27
#include <linux/component.h>
#include <drm/i915_component.h>
#include "intel_drv.h"
28 29 30 31 32

#include <drm/drmP.h>
#include <drm/drm_edid.h>
#include "i915_drv.h"

33 34 35 36 37 38 39 40 41 42 43
/**
 * 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
44 45
 * transcoder and port, and after completed link training. Therefore the audio
 * enable/disable sequences are part of the modeset sequence.
46 47 48 49 50 51 52
 *
 * 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.)
53
 *
54 55
 * 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
56
 * defined in graphics driver and called in audio driver. The
57
 * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver.
58 59
 */

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 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 113 114 115 116
/* DP N/M table */
#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;
};

/* 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 },
};

static const struct dp_aud_n_m *
audio_config_dp_get_n_m(struct intel_crtc *intel_crtc, int rate)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(dp_aud_n_m); i++) {
		if (rate == dp_aud_n_m[i].sample_rate &&
		    intel_crtc->config->port_clock == dp_aud_n_m[i].clock)
			return &dp_aud_n_m[i];
	}

	return NULL;
}

117
static const struct {
118 119 120
	int clock;
	u32 config;
} hdmi_audio_clock[] = {
121
	{ 25175, AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 },
122 123
	{ 25200, AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 }, /* default per bspec */
	{ 27000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 },
124
	{ 27027, AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 },
125
	{ 54000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 },
126 127
	{ 54054, AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 },
	{ 74176, AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 },
128
	{ 74250, AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 },
129
	{ 148352, AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 },
130 131 132
	{ 148500, AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 },
};

133 134
/* HDMI N/CTS table */
#define TMDS_297M 297000
135
#define TMDS_296M 296703
136 137 138 139 140
static const struct {
	int sample_rate;
	int clock;
	int n;
	int cts;
141
} hdmi_aud_ncts[] = {
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
	{ 44100, TMDS_296M, 4459, 234375 },
	{ 44100, TMDS_297M, 4704, 247500 },
	{ 48000, TMDS_296M, 5824, 281250 },
	{ 48000, TMDS_297M, 5120, 247500 },
	{ 32000, TMDS_296M, 5824, 421875 },
	{ 32000, TMDS_297M, 3072, 222750 },
	{ 88200, TMDS_296M, 8918, 234375 },
	{ 88200, TMDS_297M, 9408, 247500 },
	{ 96000, TMDS_296M, 11648, 281250 },
	{ 96000, TMDS_297M, 10240, 247500 },
	{ 176400, TMDS_296M, 17836, 234375 },
	{ 176400, TMDS_297M, 18816, 247500 },
	{ 192000, TMDS_296M, 23296, 281250 },
	{ 192000, TMDS_297M, 20480, 247500 },
};

158
/* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
159
static u32 audio_config_hdmi_pixel_clock(const struct drm_display_mode *adjusted_mode)
160 161 162 163
{
	int i;

	for (i = 0; i < ARRAY_SIZE(hdmi_audio_clock); i++) {
164
		if (adjusted_mode->crtc_clock == hdmi_audio_clock[i].clock)
165 166 167 168
			break;
	}

	if (i == ARRAY_SIZE(hdmi_audio_clock)) {
169
		DRM_DEBUG_KMS("HDMI audio pixel clock setting for %d not found, falling back to defaults\n",
170
			      adjusted_mode->crtc_clock);
171 172 173 174 175 176 177 178 179 180
		i = 1;
	}

	DRM_DEBUG_KMS("Configuring HDMI audio for pixel clock %d (0x%08x)\n",
		      hdmi_audio_clock[i].clock,
		      hdmi_audio_clock[i].config);

	return hdmi_audio_clock[i].config;
}

181 182
static int audio_config_hdmi_get_n(const struct drm_display_mode *adjusted_mode,
				   int rate)
183 184 185
{
	int i;

186 187 188 189
	for (i = 0; i < ARRAY_SIZE(hdmi_aud_ncts); i++) {
		if (rate == hdmi_aud_ncts[i].sample_rate &&
		    adjusted_mode->crtc_clock == hdmi_aud_ncts[i].clock) {
			return hdmi_aud_ncts[i].n;
190 191 192 193 194
		}
	}
	return 0;
}

195
static bool intel_eld_uptodate(struct drm_connector *connector,
196 197 198
			       i915_reg_t reg_eldv, uint32_t bits_eldv,
			       i915_reg_t reg_elda, uint32_t bits_elda,
			       i915_reg_t reg_edid)
199
{
200
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
201
	uint8_t *eld = connector->eld;
202 203
	uint32_t tmp;
	int i;
204

205 206
	tmp = I915_READ(reg_eldv);
	tmp &= bits_eldv;
207

208
	if (!tmp)
209 210
		return false;

211 212 213
	tmp = I915_READ(reg_elda);
	tmp &= ~bits_elda;
	I915_WRITE(reg_elda, tmp);
214

215
	for (i = 0; i < drm_eld_size(eld) / 4; i++)
216 217 218 219 220 221
		if (I915_READ(reg_edid) != *((uint32_t *)eld + i))
			return false;

	return true;
}

222 223
static void g4x_audio_codec_disable(struct intel_encoder *encoder)
{
224
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
	uint32_t eldv, tmp;

	DRM_DEBUG_KMS("Disable audio codec\n");

	tmp = I915_READ(G4X_AUD_VID_DID);
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	/* Invalidate ELD */
	tmp = I915_READ(G4X_AUD_CNTL_ST);
	tmp &= ~eldv;
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
}

241 242
static void g4x_audio_codec_enable(struct drm_connector *connector,
				   struct intel_encoder *encoder,
243
				   const struct drm_display_mode *adjusted_mode)
244
{
245
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
246 247
	uint8_t *eld = connector->eld;
	uint32_t eldv;
248 249
	uint32_t tmp;
	int len, i;
250

251 252
	DRM_DEBUG_KMS("Enable audio codec, %u bytes ELD\n", eld[2]);

253 254
	tmp = I915_READ(G4X_AUD_VID_DID);
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
255 256 257 258 259 260
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	if (intel_eld_uptodate(connector,
			       G4X_AUD_CNTL_ST, eldv,
261
			       G4X_AUD_CNTL_ST, G4X_ELD_ADDR_MASK,
262 263 264
			       G4X_HDMIW_HDMIEDID))
		return;

265
	tmp = I915_READ(G4X_AUD_CNTL_ST);
266
	tmp &= ~(eldv | G4X_ELD_ADDR_MASK);
267 268
	len = (tmp >> 9) & 0x1f;		/* ELD buffer size */
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
269

270
	len = min(drm_eld_size(eld) / 4, len);
271 272 273 274
	DRM_DEBUG_DRIVER("ELD size %d\n", len);
	for (i = 0; i < len; i++)
		I915_WRITE(G4X_HDMIW_HDMIEDID, *((uint32_t *)eld + i));

275 276 277
	tmp = I915_READ(G4X_AUD_CNTL_ST);
	tmp |= eldv;
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
278 279
}

280 281 282 283 284
static void
hsw_dp_audio_config_update(struct intel_crtc *intel_crtc, enum port port,
			   const struct drm_display_mode *adjusted_mode)
{
	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
285 286 287
	struct i915_audio_component *acomp = dev_priv->audio_component;
	int rate = acomp ? acomp->aud_sample_rate[port] : 0;
	const struct dp_aud_n_m *nm = audio_config_dp_get_n_m(intel_crtc, rate);
288 289 290
	enum pipe pipe = intel_crtc->pipe;
	u32 tmp;

291 292 293 294 295
	if (nm)
		DRM_DEBUG_KMS("using Maud %u, Naud %u\n", nm->m, nm->n);
	else
		DRM_DEBUG_KMS("using automatic Maud, Naud\n");

296 297 298 299 300 301
	tmp = I915_READ(HSW_AUD_CFG(pipe));
	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;

302 303 304 305 306 307
	if (nm) {
		tmp &= ~AUD_CONFIG_N_MASK;
		tmp |= AUD_CONFIG_N(nm->n);
		tmp |= AUD_CONFIG_N_PROG_ENABLE;
	}

308
	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
309 310 311 312 313 314 315 316 317 318 319 320 321

	tmp = I915_READ(HSW_AUD_M_CTS_ENABLE(pipe));
	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;
	}

	I915_WRITE(HSW_AUD_M_CTS_ENABLE(pipe), tmp);
322 323 324 325 326
}

static void
hsw_hdmi_audio_config_update(struct intel_crtc *intel_crtc, enum port port,
			     const struct drm_display_mode *adjusted_mode)
327 328 329
{
	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
	struct i915_audio_component *acomp = dev_priv->audio_component;
330
	int rate = acomp ? acomp->aud_sample_rate[port] : 0;
331
	enum pipe pipe = intel_crtc->pipe;
332
	int n;
333 334 335 336 337 338
	u32 tmp;

	tmp = I915_READ(HSW_AUD_CFG(pipe));
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
339 340
	tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);

341 342 343 344 345 346 347 348 349
	n = audio_config_hdmi_get_n(adjusted_mode, rate);
	if (n != 0) {
		DRM_DEBUG_KMS("using N %d\n", n);

		tmp &= ~AUD_CONFIG_N_MASK;
		tmp |= AUD_CONFIG_N(n);
		tmp |= AUD_CONFIG_N_PROG_ENABLE;
	} else {
		DRM_DEBUG_KMS("using automatic N\n");
350 351 352
	}

	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
353 354 355 356 357 358

	tmp = I915_READ(HSW_AUD_M_CTS_ENABLE(pipe));
	tmp &= ~AUD_CONFIG_M_MASK;
	tmp &= ~AUD_M_CTS_M_VALUE_INDEX;
	tmp |= AUD_M_CTS_M_PROG_ENABLE;
	I915_WRITE(HSW_AUD_M_CTS_ENABLE(pipe), tmp);
359 360
}

361 362 363 364 365 366 367 368 369 370
static void
hsw_audio_config_update(struct intel_crtc *intel_crtc, enum port port,
			const struct drm_display_mode *adjusted_mode)
{
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
		hsw_dp_audio_config_update(intel_crtc, port, adjusted_mode);
	else
		hsw_hdmi_audio_config_update(intel_crtc, port, adjusted_mode);
}

371 372
static void hsw_audio_codec_disable(struct intel_encoder *encoder)
{
373
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
374 375
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
	enum pipe pipe = intel_crtc->pipe;
376 377
	uint32_t tmp;

378 379
	DRM_DEBUG_KMS("Disable audio codec on pipe %c\n", pipe_name(pipe));

380 381
	mutex_lock(&dev_priv->av_mutex);

382 383 384 385 386 387
	/* Disable timestamps */
	tmp = I915_READ(HSW_AUD_CFG(pipe));
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
388
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
389 390 391 392
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	I915_WRITE(HSW_AUD_CFG(pipe), tmp);

	/* Invalidate ELD */
393
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
394
	tmp &= ~AUDIO_ELD_VALID(pipe);
395
	tmp &= ~AUDIO_OUTPUT_ENABLE(pipe);
396
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
397 398

	mutex_unlock(&dev_priv->av_mutex);
399 400 401
}

static void hsw_audio_codec_enable(struct drm_connector *connector,
402
				   struct intel_encoder *intel_encoder,
403
				   const struct drm_display_mode *adjusted_mode)
404
{
405
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
406
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
407
	enum pipe pipe = intel_crtc->pipe;
408
	enum port port = intel_encoder->port;
409
	const uint8_t *eld = connector->eld;
410 411
	uint32_t tmp;
	int len, i;
412

413
	DRM_DEBUG_KMS("Enable audio codec on pipe %c, %u bytes ELD\n",
414
		      pipe_name(pipe), drm_eld_size(eld));
415

416 417
	mutex_lock(&dev_priv->av_mutex);

418 419
	/* Enable audio presence detect, invalidate ELD */
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
420 421
	tmp |= AUDIO_OUTPUT_ENABLE(pipe);
	tmp &= ~AUDIO_ELD_VALID(pipe);
422
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
423

424 425 426 427 428 429
	/*
	 * 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.
	 */
430

431 432
	/* Reset ELD write address */
	tmp = I915_READ(HSW_AUD_DIP_ELD_CTRL(pipe));
433
	tmp &= ~IBX_ELD_ADDRESS_MASK;
434
	I915_WRITE(HSW_AUD_DIP_ELD_CTRL(pipe), tmp);
435

436
	/* Up to 84 bytes of hw ELD buffer */
437 438
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
439
		I915_WRITE(HSW_AUD_EDID_DATA(pipe), *((uint32_t *)eld + i));
440

441
	/* ELD valid */
442
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
443
	tmp |= AUDIO_ELD_VALID(pipe);
444
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
445 446

	/* Enable timestamps */
447
	hsw_audio_config_update(intel_crtc, port, adjusted_mode);
448 449

	mutex_unlock(&dev_priv->av_mutex);
450 451
}

452
static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
453
{
454 455
	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
456
	enum pipe pipe = intel_crtc->pipe;
457
	enum port port = intel_encoder->port;
458
	uint32_t tmp, eldv;
459
	i915_reg_t aud_config, aud_cntrl_st2;
460 461 462 463

	DRM_DEBUG_KMS("Disable audio codec on port %c, pipe %c\n",
		      port_name(port), pipe_name(pipe));

464 465 466
	if (WARN_ON(port == PORT_A))
		return;

467
	if (HAS_PCH_IBX(dev_priv)) {
468 469
		aud_config = IBX_AUD_CFG(pipe);
		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
470
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
471 472 473 474 475 476 477 478 479 480 481 482 483
		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 */
	tmp = I915_READ(aud_config);
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
484
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
485 486 487
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	I915_WRITE(aud_config, tmp);

488
	eldv = IBX_ELD_VALID(port);
489 490 491 492 493 494 495

	/* Invalidate ELD */
	tmp = I915_READ(aud_cntrl_st2);
	tmp &= ~eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
}

496
static void ilk_audio_codec_enable(struct drm_connector *connector,
497
				   struct intel_encoder *intel_encoder,
498
				   const struct drm_display_mode *adjusted_mode)
499
{
500
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
501
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
502
	enum pipe pipe = intel_crtc->pipe;
503
	enum port port = intel_encoder->port;
504
	uint8_t *eld = connector->eld;
505
	uint32_t tmp, eldv;
506
	int len, i;
507
	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
508 509

	DRM_DEBUG_KMS("Enable audio codec on port %c, pipe %c, %u bytes ELD\n",
510
		      port_name(port), pipe_name(pipe), drm_eld_size(eld));
511

512 513 514
	if (WARN_ON(port == PORT_A))
		return;

515 516 517 518 519 520
	/*
	 * 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.
	 */
521

522
	if (HAS_PCH_IBX(dev_priv)) {
523 524 525 526
		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;
527 528
	} else if (IS_VALLEYVIEW(dev_priv) ||
		   IS_CHERRYVIEW(dev_priv)) {
529 530 531 532 533 534 535 536 537 538 539
		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;
	}

540
	eldv = IBX_ELD_VALID(port);
541

542
	/* Invalidate ELD */
543 544 545
	tmp = I915_READ(aud_cntrl_st2);
	tmp &= ~eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
546

547
	/* Reset ELD write address */
548
	tmp = I915_READ(aud_cntl_st);
549
	tmp &= ~IBX_ELD_ADDRESS_MASK;
550
	I915_WRITE(aud_cntl_st, tmp);
551

552
	/* Up to 84 bytes of hw ELD buffer */
553 554
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
555 556
		I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));

557
	/* ELD valid */
558 559 560
	tmp = I915_READ(aud_cntrl_st2);
	tmp |= eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
561 562 563 564 565 566

	/* Enable timestamps */
	tmp = I915_READ(aud_config);
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
567
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
568 569
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	else
570
		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
571
	I915_WRITE(aud_config, tmp);
572 573
}

574 575 576 577 578 579 580 581
/**
 * intel_audio_codec_enable - Enable the audio codec for HD audio
 * @intel_encoder: encoder on which to enable audio
 *
 * The enable sequences may only be performed after enabling the transcoder and
 * port, and after completed link training.
 */
void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
582
{
583 584
	struct drm_encoder *encoder = &intel_encoder->base;
	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
585
	const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
586
	struct drm_connector *connector;
587
	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
588
	struct i915_audio_component *acomp = dev_priv->audio_component;
589
	enum port port = intel_encoder->port;
590
	enum pipe pipe = crtc->pipe;
591

592
	connector = drm_select_eld(encoder);
593 594 595 596 597 598 599 600 601
	if (!connector)
		return;

	DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
			 connector->base.id,
			 connector->name,
			 connector->encoder->base.id,
			 connector->encoder->name);

602 603
	/* ELD Conn_Type */
	connector->eld[5] &= ~(3 << 2);
604
	if (intel_crtc_has_dp_encoder(crtc->config))
605 606
		connector->eld[5] |= (1 << 2);

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

609
	if (dev_priv->display.audio_codec_enable)
610 611
		dev_priv->display.audio_codec_enable(connector, intel_encoder,
						     adjusted_mode);
612

613
	mutex_lock(&dev_priv->av_mutex);
614
	intel_encoder->audio_connector = connector;
615

616
	/* referred in audio callbacks */
617
	dev_priv->av_enc_map[pipe] = intel_encoder;
618 619
	mutex_unlock(&dev_priv->av_mutex);

620 621 622 623
	/* audio drivers expect pipe = -1 to indicate Non-MST cases */
	if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
		pipe = -1;

624
	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
625 626
		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
						 (int) port, (int) pipe);
627 628 629 630
}

/**
 * intel_audio_codec_disable - Disable the audio codec for HD audio
631
 * @intel_encoder: encoder on which to disable audio
632 633 634 635
 *
 * The disable sequences must be performed before disabling the transcoder or
 * port.
 */
636
void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
637
{
638
	struct drm_encoder *encoder = &intel_encoder->base;
639
	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
640
	struct i915_audio_component *acomp = dev_priv->audio_component;
641
	enum port port = intel_encoder->port;
642 643
	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
	enum pipe pipe = crtc->pipe;
644 645

	if (dev_priv->display.audio_codec_disable)
646 647
		dev_priv->display.audio_codec_disable(intel_encoder);

648
	mutex_lock(&dev_priv->av_mutex);
649
	intel_encoder->audio_connector = NULL;
650
	dev_priv->av_enc_map[pipe] = NULL;
651 652
	mutex_unlock(&dev_priv->av_mutex);

653 654 655 656
	/* audio drivers expect pipe = -1 to indicate Non-MST cases */
	if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
		pipe = -1;

657
	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
658 659
		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
						 (int) port, (int) pipe);
660 661 662
}

/**
663 664
 * intel_init_audio_hooks - Set up chip specific audio hooks
 * @dev_priv: device private
665
 */
666
void intel_init_audio_hooks(struct drm_i915_private *dev_priv)
667
{
668
	if (IS_G4X(dev_priv)) {
669
		dev_priv->display.audio_codec_enable = g4x_audio_codec_enable;
670
		dev_priv->display.audio_codec_disable = g4x_audio_codec_disable;
671
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
672
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
673
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
674
	} else if (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8) {
675 676
		dev_priv->display.audio_codec_enable = hsw_audio_codec_enable;
		dev_priv->display.audio_codec_disable = hsw_audio_codec_disable;
677
	} else if (HAS_PCH_SPLIT(dev_priv)) {
678
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
679
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
680
	}
681
}
I
Imre Deak 已提交
682

683
static void i915_audio_component_get_power(struct device *kdev)
I
Imre Deak 已提交
684
{
685
	intel_display_power_get(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO);
I
Imre Deak 已提交
686 687
}

688
static void i915_audio_component_put_power(struct device *kdev)
I
Imre Deak 已提交
689
{
690
	intel_display_power_put(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO);
I
Imre Deak 已提交
691 692
}

693
static void i915_audio_component_codec_wake_override(struct device *kdev,
694 695
						     bool enable)
{
696
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
697 698
	u32 tmp;

699
	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
700 701
		return;

702
	i915_audio_component_get_power(kdev);
703

704 705 706 707 708 709 710 711 712 713 714 715 716 717 718
	/*
	 * Enable/disable generating the codec wake signal, overriding the
	 * internal logic to generate the codec wake to controller.
	 */
	tmp = I915_READ(HSW_AUD_CHICKENBIT);
	tmp &= ~SKL_AUD_CODEC_WAKE_SIGNAL;
	I915_WRITE(HSW_AUD_CHICKENBIT, tmp);
	usleep_range(1000, 1500);

	if (enable) {
		tmp = I915_READ(HSW_AUD_CHICKENBIT);
		tmp |= SKL_AUD_CODEC_WAKE_SIGNAL;
		I915_WRITE(HSW_AUD_CHICKENBIT, tmp);
		usleep_range(1000, 1500);
	}
719

720
	i915_audio_component_put_power(kdev);
721 722
}

I
Imre Deak 已提交
723
/* Get CDCLK in kHz  */
724
static int i915_audio_component_get_cdclk_freq(struct device *kdev)
I
Imre Deak 已提交
725
{
726
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
I
Imre Deak 已提交
727 728 729 730

	if (WARN_ON_ONCE(!HAS_DDI(dev_priv)))
		return -ENODEV;

731
	return dev_priv->cdclk_freq;
I
Imre Deak 已提交
732 733
}

734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761
static struct intel_encoder *get_saved_enc(struct drm_i915_private *dev_priv,
					       int port, int pipe)
{

	if (WARN_ON(pipe >= I915_MAX_PIPES))
		return NULL;

	/* MST */
	if (pipe >= 0)
		return dev_priv->av_enc_map[pipe];

	/* Non-MST */
	for_each_pipe(dev_priv, pipe) {
		struct intel_encoder *encoder;

		encoder = dev_priv->av_enc_map[pipe];
		if (encoder == NULL)
			continue;

		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)
762
{
763
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
764 765
	struct intel_encoder *intel_encoder;
	struct intel_crtc *crtc;
766
	struct drm_display_mode *adjusted_mode;
767
	struct i915_audio_component *acomp = dev_priv->audio_component;
768
	int err = 0;
769

770
	if (!HAS_DDI(dev_priv))
771 772
		return 0;

773
	i915_audio_component_get_power(kdev);
774
	mutex_lock(&dev_priv->av_mutex);
775

776
	/* 1. get the pipe */
777
	intel_encoder = get_saved_enc(dev_priv, port, pipe);
778
	if (!intel_encoder || !intel_encoder->base.crtc ||
779 780
	    (intel_encoder->type != INTEL_OUTPUT_HDMI &&
	     intel_encoder->type != INTEL_OUTPUT_DP)) {
781
		DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
782 783
		err = -ENODEV;
		goto unlock;
784
	}
785 786

	/* pipe passed from the audio driver will be -1 for Non-MST case */
787 788 789
	crtc = to_intel_crtc(intel_encoder->base.crtc);
	pipe = crtc->pipe;

790
	adjusted_mode = &crtc->config->base.adjusted_mode;
791

792 793 794
	/* port must be valid now, otherwise the pipe will be invalid */
	acomp->aud_sample_rate[port] = rate;

795
	hsw_audio_config_update(crtc, port, adjusted_mode);
796

797
 unlock:
798
	mutex_unlock(&dev_priv->av_mutex);
799
	i915_audio_component_put_power(kdev);
800
	return err;
801 802
}

803
static int i915_audio_component_get_eld(struct device *kdev, int port,
804
					int pipe, bool *enabled,
805 806
					unsigned char *buf, int max_bytes)
{
807
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
808 809 810 811 812
	struct intel_encoder *intel_encoder;
	const u8 *eld;
	int ret = -EINVAL;

	mutex_lock(&dev_priv->av_mutex);
813 814 815 816 817 818 819 820 821 822 823 824 825 826

	intel_encoder = get_saved_enc(dev_priv, port, pipe);
	if (!intel_encoder) {
		DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
		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));
827 828 829 830
	}

	mutex_unlock(&dev_priv->av_mutex);
	return ret;
831 832
}

I
Imre Deak 已提交
833 834 835 836
static const struct i915_audio_component_ops i915_audio_component_ops = {
	.owner		= THIS_MODULE,
	.get_power	= i915_audio_component_get_power,
	.put_power	= i915_audio_component_put_power,
837
	.codec_wake_override = i915_audio_component_codec_wake_override,
I
Imre Deak 已提交
838
	.get_cdclk_freq	= i915_audio_component_get_cdclk_freq,
839
	.sync_audio_rate = i915_audio_component_sync_audio_rate,
840
	.get_eld	= i915_audio_component_get_eld,
I
Imre Deak 已提交
841 842
};

843 844
static int i915_audio_component_bind(struct device *i915_kdev,
				     struct device *hda_kdev, void *data)
I
Imre Deak 已提交
845 846
{
	struct i915_audio_component *acomp = data;
847
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
848
	int i;
I
Imre Deak 已提交
849 850 851 852

	if (WARN_ON(acomp->ops || acomp->dev))
		return -EEXIST;

853
	drm_modeset_lock_all(&dev_priv->drm);
I
Imre Deak 已提交
854
	acomp->ops = &i915_audio_component_ops;
855
	acomp->dev = i915_kdev;
856 857 858
	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;
859
	dev_priv->audio_component = acomp;
860
	drm_modeset_unlock_all(&dev_priv->drm);
I
Imre Deak 已提交
861 862 863 864

	return 0;
}

865 866
static void i915_audio_component_unbind(struct device *i915_kdev,
					struct device *hda_kdev, void *data)
I
Imre Deak 已提交
867 868
{
	struct i915_audio_component *acomp = data;
869
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
I
Imre Deak 已提交
870

871
	drm_modeset_lock_all(&dev_priv->drm);
I
Imre Deak 已提交
872 873
	acomp->ops = NULL;
	acomp->dev = NULL;
874
	dev_priv->audio_component = NULL;
875
	drm_modeset_unlock_all(&dev_priv->drm);
I
Imre Deak 已提交
876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
}

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

/**
 * 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).
 */
void i915_audio_component_init(struct drm_i915_private *dev_priv)
{
	int ret;

903
	ret = component_add(dev_priv->drm.dev, &i915_audio_component_bind_ops);
I
Imre Deak 已提交
904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924
	if (ret < 0) {
		DRM_ERROR("failed to add audio component (%d)\n", ret);
		/* continue with reduced functionality */
		return;
	}

	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.
 */
void i915_audio_component_cleanup(struct drm_i915_private *dev_priv)
{
	if (!dev_priv->audio_component_registered)
		return;

925
	component_del(dev_priv->drm.dev, &i915_audio_component_bind_ops);
I
Imre Deak 已提交
926 927
	dev_priv->audio_component_registered = false;
}