aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_hdcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_hdcp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_hdcp.c185
1 files changed, 132 insertions, 53 deletions
diff --git a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c
index 14ca5d3057a7..2db5da550a1c 100644
--- a/drivers/gpu/drm/i915/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/intel_hdcp.c
@@ -37,6 +37,43 @@ static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port *intel_dig_port,
37 return 0; 37 return 0;
38} 38}
39 39
40static bool hdcp_key_loadable(struct drm_i915_private *dev_priv)
41{
42 struct i915_power_domains *power_domains = &dev_priv->power_domains;
43 struct i915_power_well *power_well;
44 enum i915_power_well_id id;
45 bool enabled = false;
46
47 /*
48 * On HSW and BDW, Display HW loads the Key as soon as Display resumes.
49 * On all BXT+, SW can load the keys only when the PW#1 is turned on.
50 */
51 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
52 id = HSW_DISP_PW_GLOBAL;
53 else
54 id = SKL_DISP_PW_1;
55
56 mutex_lock(&power_domains->lock);
57
58 /* PG1 (power well #1) needs to be enabled */
59 for_each_power_well(dev_priv, power_well) {
60 if (power_well->id == id) {
61 enabled = power_well->ops->is_enabled(dev_priv,
62 power_well);
63 break;
64 }
65 }
66 mutex_unlock(&power_domains->lock);
67
68 /*
69 * Another req for hdcp key loadability is enabled state of pll for
70 * cdclk. Without active crtc we wont land here. So we are assuming that
71 * cdclk is already on.
72 */
73
74 return enabled;
75}
76
40static void intel_hdcp_clear_keys(struct drm_i915_private *dev_priv) 77static void intel_hdcp_clear_keys(struct drm_i915_private *dev_priv)
41{ 78{
42 I915_WRITE(HDCP_KEY_CONF, HDCP_CLEAR_KEYS_TRIGGER); 79 I915_WRITE(HDCP_KEY_CONF, HDCP_CLEAR_KEYS_TRIGGER);
@@ -142,53 +179,17 @@ bool intel_hdcp_is_ksv_valid(u8 *ksv)
142 return true; 179 return true;
143} 180}
144 181
145/* Implements Part 2 of the HDCP authorization procedure */
146static 182static
147int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port, 183int intel_hdcp_validate_v_prime(struct intel_digital_port *intel_dig_port,
148 const struct intel_hdcp_shim *shim) 184 const struct intel_hdcp_shim *shim,
185 u8 *ksv_fifo, u8 num_downstream, u8 *bstatus)
149{ 186{
150 struct drm_i915_private *dev_priv; 187 struct drm_i915_private *dev_priv;
151 u32 vprime, sha_text, sha_leftovers, rep_ctl; 188 u32 vprime, sha_text, sha_leftovers, rep_ctl;
152 u8 bstatus[2], num_downstream, *ksv_fifo;
153 int ret, i, j, sha_idx; 189 int ret, i, j, sha_idx;
154 190
155 dev_priv = intel_dig_port->base.base.dev->dev_private; 191 dev_priv = intel_dig_port->base.base.dev->dev_private;
156 192
157 ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
158 if (ret) {
159 DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
160 return ret;
161 }
162
163 ret = shim->read_bstatus(intel_dig_port, bstatus);
164 if (ret)
165 return ret;
166
167 if (DRM_HDCP_MAX_DEVICE_EXCEEDED(bstatus[0]) ||
168 DRM_HDCP_MAX_CASCADE_EXCEEDED(bstatus[1])) {
169 DRM_ERROR("Max Topology Limit Exceeded\n");
170 return -EPERM;
171 }
172
173 /*
174 * When repeater reports 0 device count, HDCP1.4 spec allows disabling
175 * the HDCP encryption. That implies that repeater can't have its own
176 * display. As there is no consumption of encrypted content in the
177 * repeater with 0 downstream devices, we are failing the
178 * authentication.
179 */
180 num_downstream = DRM_HDCP_NUM_DOWNSTREAM(bstatus[0]);
181 if (num_downstream == 0)
182 return -EINVAL;
183
184 ksv_fifo = kzalloc(num_downstream * DRM_HDCP_KSV_LEN, GFP_KERNEL);
185 if (!ksv_fifo)
186 return -ENOMEM;
187
188 ret = shim->read_ksv_fifo(intel_dig_port, num_downstream, ksv_fifo);
189 if (ret)
190 return ret;
191
192 /* Process V' values from the receiver */ 193 /* Process V' values from the receiver */
193 for (i = 0; i < DRM_HDCP_V_PRIME_NUM_PARTS; i++) { 194 for (i = 0; i < DRM_HDCP_V_PRIME_NUM_PARTS; i++) {
194 ret = shim->read_v_prime_part(intel_dig_port, i, &vprime); 195 ret = shim->read_v_prime_part(intel_dig_port, i, &vprime);
@@ -353,7 +354,8 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
353 return ret; 354 return ret;
354 sha_idx += sizeof(sha_text); 355 sha_idx += sizeof(sha_text);
355 } else { 356 } else {
356 DRM_ERROR("Invalid number of leftovers %d\n", sha_leftovers); 357 DRM_DEBUG_KMS("Invalid number of leftovers %d\n",
358 sha_leftovers);
357 return -EINVAL; 359 return -EINVAL;
358 } 360 }
359 361
@@ -381,17 +383,83 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
381 if (intel_wait_for_register(dev_priv, HDCP_REP_CTL, 383 if (intel_wait_for_register(dev_priv, HDCP_REP_CTL,
382 HDCP_SHA1_COMPLETE, 384 HDCP_SHA1_COMPLETE,
383 HDCP_SHA1_COMPLETE, 1)) { 385 HDCP_SHA1_COMPLETE, 1)) {
384 DRM_ERROR("Timed out waiting for SHA1 complete\n"); 386 DRM_DEBUG_KMS("Timed out waiting for SHA1 complete\n");
385 return -ETIMEDOUT; 387 return -ETIMEDOUT;
386 } 388 }
387 if (!(I915_READ(HDCP_REP_CTL) & HDCP_SHA1_V_MATCH)) { 389 if (!(I915_READ(HDCP_REP_CTL) & HDCP_SHA1_V_MATCH)) {
388 DRM_ERROR("SHA-1 mismatch, HDCP failed\n"); 390 DRM_DEBUG_KMS("SHA-1 mismatch, HDCP failed\n");
389 return -ENXIO; 391 return -ENXIO;
390 } 392 }
391 393
394 return 0;
395}
396
397/* Implements Part 2 of the HDCP authorization procedure */
398static
399int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
400 const struct intel_hdcp_shim *shim)
401{
402 u8 bstatus[2], num_downstream, *ksv_fifo;
403 int ret, i, tries = 3;
404
405 ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
406 if (ret) {
407 DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
408 return ret;
409 }
410
411 ret = shim->read_bstatus(intel_dig_port, bstatus);
412 if (ret)
413 return ret;
414
415 if (DRM_HDCP_MAX_DEVICE_EXCEEDED(bstatus[0]) ||
416 DRM_HDCP_MAX_CASCADE_EXCEEDED(bstatus[1])) {
417 DRM_ERROR("Max Topology Limit Exceeded\n");
418 return -EPERM;
419 }
420
421 /*
422 * When repeater reports 0 device count, HDCP1.4 spec allows disabling
423 * the HDCP encryption. That implies that repeater can't have its own
424 * display. As there is no consumption of encrypted content in the
425 * repeater with 0 downstream devices, we are failing the
426 * authentication.
427 */
428 num_downstream = DRM_HDCP_NUM_DOWNSTREAM(bstatus[0]);
429 if (num_downstream == 0)
430 return -EINVAL;
431
432 ksv_fifo = kzalloc(num_downstream * DRM_HDCP_KSV_LEN, GFP_KERNEL);
433 if (!ksv_fifo)
434 return -ENOMEM;
435
436 ret = shim->read_ksv_fifo(intel_dig_port, num_downstream, ksv_fifo);
437 if (ret)
438 goto err;
439
440 /*
441 * When V prime mismatches, DP Spec mandates re-read of
442 * V prime atleast twice.
443 */
444 for (i = 0; i < tries; i++) {
445 ret = intel_hdcp_validate_v_prime(intel_dig_port, shim,
446 ksv_fifo, num_downstream,
447 bstatus);
448 if (!ret)
449 break;
450 }
451
452 if (i == tries) {
453 DRM_ERROR("V Prime validation failed.(%d)\n", ret);
454 goto err;
455 }
456
392 DRM_DEBUG_KMS("HDCP is enabled (%d downstream devices)\n", 457 DRM_DEBUG_KMS("HDCP is enabled (%d downstream devices)\n",
393 num_downstream); 458 num_downstream);
394 return 0; 459 ret = 0;
460err:
461 kfree(ksv_fifo);
462 return ret;
395} 463}
396 464
397/* Implements Part 1 of the HDCP authorization procedure */ 465/* Implements Part 1 of the HDCP authorization procedure */
@@ -506,15 +574,26 @@ static int intel_hdcp_auth(struct intel_digital_port *intel_dig_port,
506 */ 574 */
507 wait_remaining_ms_from_jiffies(r0_prime_gen_start, 300); 575 wait_remaining_ms_from_jiffies(r0_prime_gen_start, 300);
508 576
509 ri.reg = 0; 577 tries = 3;
510 ret = shim->read_ri_prime(intel_dig_port, ri.shim);
511 if (ret)
512 return ret;
513 I915_WRITE(PORT_HDCP_RPRIME(port), ri.reg);
514 578
515 /* Wait for Ri prime match */ 579 /*
516 if (wait_for(I915_READ(PORT_HDCP_STATUS(port)) & 580 * DP HDCP Spec mandates the two more reattempt to read R0, incase
517 (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC), 1)) { 581 * of R0 mismatch.
582 */
583 for (i = 0; i < tries; i++) {
584 ri.reg = 0;
585 ret = shim->read_ri_prime(intel_dig_port, ri.shim);
586 if (ret)
587 return ret;
588 I915_WRITE(PORT_HDCP_RPRIME(port), ri.reg);
589
590 /* Wait for Ri prime match */
591 if (!wait_for(I915_READ(PORT_HDCP_STATUS(port)) &
592 (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC), 1))
593 break;
594 }
595
596 if (i == tries) {
518 DRM_ERROR("Timed out waiting for Ri prime match (%x)\n", 597 DRM_ERROR("Timed out waiting for Ri prime match (%x)\n",
519 I915_READ(PORT_HDCP_STATUS(port))); 598 I915_READ(PORT_HDCP_STATUS(port)));
520 return -ETIMEDOUT; 599 return -ETIMEDOUT;
@@ -580,8 +659,8 @@ static int _intel_hdcp_enable(struct intel_connector *connector)
580 DRM_DEBUG_KMS("[%s:%d] HDCP is being enabled...\n", 659 DRM_DEBUG_KMS("[%s:%d] HDCP is being enabled...\n",
581 connector->base.name, connector->base.base.id); 660 connector->base.name, connector->base.base.id);
582 661
583 if (!(I915_READ(SKL_FUSE_STATUS) & SKL_FUSE_PG_DIST_STATUS(1))) { 662 if (!hdcp_key_loadable(dev_priv)) {
584 DRM_ERROR("PG1 is disabled, cannot load keys\n"); 663 DRM_ERROR("HDCP key Load is not possible\n");
585 return -ENXIO; 664 return -ENXIO;
586 } 665 }
587 666