Lines Matching +full:i2c +full:- +full:topology

1 /* SPDX-License-Identifier: MIT */
4 * Copyright _ 2017-2019, Intel Corporation.
12 #include <linux/i2c.h>
33 return connector->port ? connector->port->vcpi.vcpi : 0; in intel_conn_to_vcpi()
39 const struct intel_hdcp_shim *shim = connector->hdcp.shim; in intel_streams_type1_capable()
45 if (shim->streams_type1_capable) in intel_streams_type1_capable()
46 shim->streams_type1_capable(connector, &capable); in intel_streams_type1_capable()
53 * content_type for all streams in DP MST topology because security f/w doesn't
58 * DP MST topology. Though it is not compulsory, security fw should change its
67 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_hdcp_required_content_stream()
68 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in intel_hdcp_required_content_stream()
72 data->k = 0; in intel_hdcp_required_content_stream()
74 if (dig_port->hdcp_auth_status) in intel_hdcp_required_content_stream()
77 drm_connector_list_iter_begin(&i915->drm, &conn_iter); in intel_hdcp_required_content_stream()
79 if (connector->base.status == connector_status_disconnected) in intel_hdcp_required_content_stream()
92 data->streams[data->k].stream_id = intel_conn_to_vcpi(connector); in intel_hdcp_required_content_stream()
93 data->k++; in intel_hdcp_required_content_stream()
96 if (dig_port->dp.active_mst_links <= 1) in intel_hdcp_required_content_stream()
101 if (drm_WARN_ON(&i915->drm, data->k > INTEL_NUM_PIPES(i915) || data->k == 0)) in intel_hdcp_required_content_stream()
102 return -EINVAL; in intel_hdcp_required_content_stream()
105 * Apply common protection level across all streams in DP MST Topology. in intel_hdcp_required_content_stream()
106 * Use highest supported content type for all streams in DP MST Topology. in intel_hdcp_required_content_stream()
108 for (k = 0; k < data->k; k++) in intel_hdcp_required_content_stream()
109 data->streams[k].stream_type = in intel_hdcp_required_content_stream()
132 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_hdcp_read_valid_bksv()
137 ret = shim->read_bksv(dig_port, bksv); in intel_hdcp_read_valid_bksv()
144 drm_dbg_kms(&i915->drm, "Bksv is invalid\n"); in intel_hdcp_read_valid_bksv()
145 return -ENODEV; in intel_hdcp_read_valid_bksv()
155 const struct intel_hdcp_shim *shim = connector->hdcp.shim; in intel_hdcp_capable()
162 if (shim->hdcp_capable) { in intel_hdcp_capable()
163 shim->hdcp_capable(dig_port, &capable); in intel_hdcp_capable()
176 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp2_capable()
177 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_capable()
181 if (!hdcp->hdcp2_supported) in intel_hdcp2_capable()
185 mutex_lock(&dev_priv->hdcp_comp_mutex); in intel_hdcp2_capable()
186 if (!dev_priv->hdcp_comp_added || !dev_priv->hdcp_master) { in intel_hdcp2_capable()
187 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp2_capable()
190 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp2_capable()
193 hdcp->shim->hdcp_2_2_capable(dig_port, &capable); in intel_hdcp2_capable()
221 ret = __wait_for(read_ret = shim->read_ksv_ready(dig_port, in intel_hdcp_poll_ksv_fifo()
230 return -ETIMEDOUT; in intel_hdcp_poll_ksv_fifo()
251 with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) in hdcp_key_loadable()
285 return -ENXIO; in intel_hdcp_load_keys()
299 drm_err(&dev_priv->drm, in intel_hdcp_load_keys()
309 ret = __intel_wait_for_register(&dev_priv->uncore, HDCP_KEY_STATUS, in intel_hdcp_load_keys()
315 return -ENXIO; in intel_hdcp_load_keys()
323 /* Returns updated SHA-1 index */
328 drm_err(&dev_priv->drm, "Timed out waiting for SHA1 ready\n"); in intel_write_sha_text()
329 return -ETIMEDOUT; in intel_write_sha_text()
353 drm_err(&dev_priv->drm, "Unknown transcoder %d\n", in intel_hdcp_get_repeater_ctl()
355 return -EINVAL; in intel_hdcp_get_repeater_ctl()
371 drm_err(&dev_priv->drm, "Unknown port %d\n", port); in intel_hdcp_get_repeater_ctl()
372 return -EINVAL; in intel_hdcp_get_repeater_ctl()
382 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_validate_v_prime()
383 enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; in intel_hdcp_validate_v_prime()
384 enum port port = dig_port->base.port; in intel_hdcp_validate_v_prime()
390 ret = shim->read_v_prime_part(dig_port, i, &vprime); in intel_hdcp_validate_v_prime()
399 * stream is written via the HDCP_SHA_TEXT register in 32-bit in intel_hdcp_validate_v_prime()
402 * helping us work the 40-bit KSVs through our 32-bit register. in intel_hdcp_validate_v_prime()
404 * NOTE: data passed via HDCP_SHA_TEXT should be big-endian in intel_hdcp_validate_v_prime()
416 sha_empty = sizeof(sha_text) - sha_leftovers; in intel_hdcp_validate_v_prime()
418 u8 off = ((sizeof(sha_text) - j - 1 - sha_leftovers) * 8); in intel_hdcp_validate_v_prime()
433 sha_leftovers = DRM_HDCP_KSV_LEN - sha_empty; in intel_hdcp_validate_v_prime()
437 ((sizeof(sha_text) - j - 1) * 8); in intel_hdcp_validate_v_prime()
491 /* Only 24-bits of data, must be in the LSB */ in intel_hdcp_validate_v_prime()
535 * Terminate the SHA-1 stream by hand. For the other leftover in intel_hdcp_validate_v_prime()
579 drm_dbg_kms(&dev_priv->drm, "Invalid number of leftovers %d\n", in intel_hdcp_validate_v_prime()
581 return -EINVAL; in intel_hdcp_validate_v_prime()
585 /* Fill up to 64-4 bytes with zeros (leave the last write for length) */ in intel_hdcp_validate_v_prime()
586 while ((sha_idx % 64) < (64 - sizeof(sha_text))) { in intel_hdcp_validate_v_prime()
595 * - 5 bytes per device in intel_hdcp_validate_v_prime()
596 * - 10 bytes for BINFO/BSTATUS(2), M0(8) in intel_hdcp_validate_v_prime()
608 drm_err(&dev_priv->drm, "Timed out waiting for SHA1 complete\n"); in intel_hdcp_validate_v_prime()
609 return -ETIMEDOUT; in intel_hdcp_validate_v_prime()
612 drm_dbg_kms(&dev_priv->drm, "SHA-1 mismatch, HDCP failed\n"); in intel_hdcp_validate_v_prime()
613 return -ENXIO; in intel_hdcp_validate_v_prime()
624 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_auth_downstream()
625 const struct intel_hdcp_shim *shim = connector->hdcp.shim; in intel_hdcp_auth_downstream()
631 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_auth_downstream()
636 ret = shim->read_bstatus(dig_port, bstatus); in intel_hdcp_auth_downstream()
642 drm_dbg_kms(&dev_priv->drm, "Max Topology Limit Exceeded\n"); in intel_hdcp_auth_downstream()
643 return -EPERM; in intel_hdcp_auth_downstream()
655 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_auth_downstream()
657 return -EINVAL; in intel_hdcp_auth_downstream()
662 drm_dbg_kms(&dev_priv->drm, "Out of mem: ksv_fifo\n"); in intel_hdcp_auth_downstream()
663 return -ENOMEM; in intel_hdcp_auth_downstream()
666 ret = shim->read_ksv_fifo(dig_port, num_downstream, ksv_fifo); in intel_hdcp_auth_downstream()
670 if (drm_hdcp_check_ksvs_revoked(&dev_priv->drm, ksv_fifo, in intel_hdcp_auth_downstream()
672 drm_err(&dev_priv->drm, "Revoked Ksv(s) in ksv_fifo\n"); in intel_hdcp_auth_downstream()
673 ret = -EPERM; in intel_hdcp_auth_downstream()
678 * When V prime mismatches, DP Spec mandates re-read of in intel_hdcp_auth_downstream()
690 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_auth_downstream()
695 drm_dbg_kms(&dev_priv->drm, "HDCP is enabled (%d downstream devices)\n", in intel_hdcp_auth_downstream()
707 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_auth()
708 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_auth()
709 const struct intel_hdcp_shim *shim = hdcp->shim; in intel_hdcp_auth()
710 enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; in intel_hdcp_auth()
711 enum port port = dig_port->base.port; in intel_hdcp_auth()
734 if (shim->hdcp_capable) { in intel_hdcp_auth()
735 ret = shim->hdcp_capable(dig_port, &hdcp_capable); in intel_hdcp_auth()
739 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_auth()
741 return -EINVAL; in intel_hdcp_auth()
757 drm_err(&dev_priv->drm, "Timed out waiting for An\n"); in intel_hdcp_auth()
758 return -ETIMEDOUT; in intel_hdcp_auth()
765 ret = shim->write_an_aksv(dig_port, an.shim); in intel_hdcp_auth()
777 if (drm_hdcp_check_ksvs_revoked(&dev_priv->drm, bksv.shim, 1) > 0) { in intel_hdcp_auth()
778 drm_err(&dev_priv->drm, "BKSV is revoked\n"); in intel_hdcp_auth()
779 return -EPERM; in intel_hdcp_auth()
787 ret = shim->repeater_present(dig_port, &repeater_present); in intel_hdcp_auth()
794 ret = shim->toggle_signalling(dig_port, cpu_transcoder, true); in intel_hdcp_auth()
804 drm_err(&dev_priv->drm, "Timed out waiting for R0 ready\n"); in intel_hdcp_auth()
805 return -ETIMEDOUT; in intel_hdcp_auth()
814 * exists on HDMI. Since the upper-bound is the same, we'll just do in intel_hdcp_auth()
827 ret = shim->read_ri_prime(dig_port, ri.shim); in intel_hdcp_auth()
841 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_auth()
845 return -ETIMEDOUT; in intel_hdcp_auth()
853 drm_err(&dev_priv->drm, "Timed out waiting for encryption\n"); in intel_hdcp_auth()
854 return -ETIMEDOUT; in intel_hdcp_auth()
858 if (shim->stream_encryption) { in intel_hdcp_auth()
859 ret = shim->stream_encryption(connector, true); in intel_hdcp_auth()
861 drm_err(&dev_priv->drm, "[%s:%d] Failed to enable HDCP 1.4 stream enc\n", in intel_hdcp_auth()
862 connector->base.name, connector->base.base.id); in intel_hdcp_auth()
865 drm_dbg_kms(&dev_priv->drm, "HDCP 1.4 transcoder: %s stream encrypted\n", in intel_hdcp_auth()
866 transcoder_name(hdcp->stream_transcoder)); in intel_hdcp_auth()
872 drm_dbg_kms(&dev_priv->drm, "HDCP is enabled (no repeater present)\n"); in intel_hdcp_auth()
879 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in _intel_hdcp_disable()
880 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp_disable()
881 enum port port = dig_port->base.port; in _intel_hdcp_disable()
882 enum transcoder cpu_transcoder = hdcp->cpu_transcoder; in _intel_hdcp_disable()
886 drm_dbg_kms(&dev_priv->drm, "[%s:%d] HDCP is being disabled...\n", in _intel_hdcp_disable()
887 connector->base.name, connector->base.base.id); in _intel_hdcp_disable()
889 if (hdcp->shim->stream_encryption) { in _intel_hdcp_disable()
890 ret = hdcp->shim->stream_encryption(connector, false); in _intel_hdcp_disable()
892 drm_err(&dev_priv->drm, "[%s:%d] Failed to disable HDCP 1.4 stream enc\n", in _intel_hdcp_disable()
893 connector->base.name, connector->base.base.id); in _intel_hdcp_disable()
896 drm_dbg_kms(&dev_priv->drm, "HDCP 1.4 transcoder: %s stream encryption disabled\n", in _intel_hdcp_disable()
897 transcoder_name(hdcp->stream_transcoder)); in _intel_hdcp_disable()
901 * all connectors in MST topology. in _intel_hdcp_disable()
903 if (dig_port->num_hdcp_streams > 0) in _intel_hdcp_disable()
907 hdcp->hdcp_encrypted = false; in _intel_hdcp_disable()
912 drm_err(&dev_priv->drm, in _intel_hdcp_disable()
914 return -ETIMEDOUT; in _intel_hdcp_disable()
922 ret = hdcp->shim->toggle_signalling(dig_port, cpu_transcoder, false); in _intel_hdcp_disable()
924 drm_err(&dev_priv->drm, "Failed to disable HDCP signalling\n"); in _intel_hdcp_disable()
928 drm_dbg_kms(&dev_priv->drm, "HDCP is disabled\n"); in _intel_hdcp_disable()
934 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in _intel_hdcp_enable()
935 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp_enable()
938 drm_dbg_kms(&dev_priv->drm, "[%s:%d] HDCP is being enabled...\n", in _intel_hdcp_enable()
939 connector->base.name, connector->base.base.id); in _intel_hdcp_enable()
942 drm_err(&dev_priv->drm, "HDCP key Load is not possible\n"); in _intel_hdcp_enable()
943 return -ENXIO; in _intel_hdcp_enable()
953 drm_err(&dev_priv->drm, "Could not load HDCP keys, (%d)\n", in _intel_hdcp_enable()
962 hdcp->hdcp_encrypted = true; in _intel_hdcp_enable()
966 drm_dbg_kms(&dev_priv->drm, "HDCP Auth failure (%d)\n", ret); in _intel_hdcp_enable()
972 drm_dbg_kms(&dev_priv->drm, in _intel_hdcp_enable()
985 struct drm_device *dev = connector->base.dev; in intel_hdcp_update_value()
987 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_update_value()
989 drm_WARN_ON(connector->base.dev, !mutex_is_locked(&hdcp->mutex)); in intel_hdcp_update_value()
991 if (hdcp->value == value) in intel_hdcp_update_value()
994 drm_WARN_ON(dev, !mutex_is_locked(&dig_port->hdcp_mutex)); in intel_hdcp_update_value()
996 if (hdcp->value == DRM_MODE_CONTENT_PROTECTION_ENABLED) { in intel_hdcp_update_value()
997 if (!drm_WARN_ON(dev, dig_port->num_hdcp_streams == 0)) in intel_hdcp_update_value()
998 dig_port->num_hdcp_streams--; in intel_hdcp_update_value()
1000 dig_port->num_hdcp_streams++; in intel_hdcp_update_value()
1003 hdcp->value = value; in intel_hdcp_update_value()
1005 drm_connector_get(&connector->base); in intel_hdcp_update_value()
1006 schedule_work(&hdcp->prop_work); in intel_hdcp_update_value()
1014 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_check_link()
1015 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_check_link()
1016 enum port port = dig_port->base.port; in intel_hdcp_check_link()
1020 mutex_lock(&hdcp->mutex); in intel_hdcp_check_link()
1021 mutex_lock(&dig_port->hdcp_mutex); in intel_hdcp_check_link()
1023 cpu_transcoder = hdcp->cpu_transcoder; in intel_hdcp_check_link()
1026 if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_ENABLED || in intel_hdcp_check_link()
1027 !hdcp->hdcp_encrypted) { in intel_hdcp_check_link()
1028 ret = -EINVAL; in intel_hdcp_check_link()
1032 if (drm_WARN_ON(&dev_priv->drm, in intel_hdcp_check_link()
1034 drm_err(&dev_priv->drm, in intel_hdcp_check_link()
1036 connector->base.name, connector->base.base.id, in intel_hdcp_check_link()
1038 ret = -ENXIO; in intel_hdcp_check_link()
1045 if (hdcp->shim->check_link(dig_port, connector)) { in intel_hdcp_check_link()
1046 if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) { in intel_hdcp_check_link()
1053 drm_dbg_kms(&dev_priv->drm, in intel_hdcp_check_link()
1055 connector->base.name, connector->base.base.id); in intel_hdcp_check_link()
1059 drm_err(&dev_priv->drm, "Failed to disable hdcp (%d)\n", ret); in intel_hdcp_check_link()
1068 drm_err(&dev_priv->drm, "Failed to enable hdcp (%d)\n", ret); in intel_hdcp_check_link()
1076 mutex_unlock(&dig_port->hdcp_mutex); in intel_hdcp_check_link()
1077 mutex_unlock(&hdcp->mutex); in intel_hdcp_check_link()
1086 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_prop_work()
1088 drm_modeset_lock(&dev_priv->drm.mode_config.connection_mutex, NULL); in intel_hdcp_prop_work()
1089 mutex_lock(&hdcp->mutex); in intel_hdcp_prop_work()
1096 if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) in intel_hdcp_prop_work()
1097 drm_hdcp_update_content_protection(&connector->base, in intel_hdcp_prop_work()
1098 hdcp->value); in intel_hdcp_prop_work()
1100 mutex_unlock(&hdcp->mutex); in intel_hdcp_prop_work()
1101 drm_modeset_unlock(&dev_priv->drm.mode_config.connection_mutex); in intel_hdcp_prop_work()
1103 drm_connector_put(&connector->base); in intel_hdcp_prop_work()
1108 return INTEL_INFO(dev_priv)->display.has_hdcp && in is_hdcp_supported()
1117 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_prepare_ake_init()
1118 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_ake_init()
1122 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_ake_init()
1123 comp = dev_priv->hdcp_master; in hdcp2_prepare_ake_init()
1125 if (!comp || !comp->ops) { in hdcp2_prepare_ake_init()
1126 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_ake_init()
1127 return -EINVAL; in hdcp2_prepare_ake_init()
1130 ret = comp->ops->initiate_hdcp2_session(comp->mei_dev, data, ake_data); in hdcp2_prepare_ake_init()
1132 drm_dbg_kms(&dev_priv->drm, "Prepare_ake_init failed. %d\n", in hdcp2_prepare_ake_init()
1134 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_ake_init()
1147 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_verify_rx_cert_prepare_km()
1148 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_rx_cert_prepare_km()
1152 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rx_cert_prepare_km()
1153 comp = dev_priv->hdcp_master; in hdcp2_verify_rx_cert_prepare_km()
1155 if (!comp || !comp->ops) { in hdcp2_verify_rx_cert_prepare_km()
1156 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rx_cert_prepare_km()
1157 return -EINVAL; in hdcp2_verify_rx_cert_prepare_km()
1160 ret = comp->ops->verify_receiver_cert_prepare_km(comp->mei_dev, data, in hdcp2_verify_rx_cert_prepare_km()
1164 drm_dbg_kms(&dev_priv->drm, "Verify rx_cert failed. %d\n", in hdcp2_verify_rx_cert_prepare_km()
1166 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rx_cert_prepare_km()
1175 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_verify_hprime()
1176 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_hprime()
1180 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_hprime()
1181 comp = dev_priv->hdcp_master; in hdcp2_verify_hprime()
1183 if (!comp || !comp->ops) { in hdcp2_verify_hprime()
1184 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_hprime()
1185 return -EINVAL; in hdcp2_verify_hprime()
1188 ret = comp->ops->verify_hprime(comp->mei_dev, data, rx_hprime); in hdcp2_verify_hprime()
1190 drm_dbg_kms(&dev_priv->drm, "Verify hprime failed. %d\n", ret); in hdcp2_verify_hprime()
1191 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_hprime()
1201 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_store_pairing_info()
1202 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_store_pairing_info()
1206 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_store_pairing_info()
1207 comp = dev_priv->hdcp_master; in hdcp2_store_pairing_info()
1209 if (!comp || !comp->ops) { in hdcp2_store_pairing_info()
1210 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_store_pairing_info()
1211 return -EINVAL; in hdcp2_store_pairing_info()
1214 ret = comp->ops->store_pairing_info(comp->mei_dev, data, pairing_info); in hdcp2_store_pairing_info()
1216 drm_dbg_kms(&dev_priv->drm, "Store pairing info failed. %d\n", in hdcp2_store_pairing_info()
1218 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_store_pairing_info()
1228 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_prepare_lc_init()
1229 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_lc_init()
1233 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_lc_init()
1234 comp = dev_priv->hdcp_master; in hdcp2_prepare_lc_init()
1236 if (!comp || !comp->ops) { in hdcp2_prepare_lc_init()
1237 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_lc_init()
1238 return -EINVAL; in hdcp2_prepare_lc_init()
1241 ret = comp->ops->initiate_locality_check(comp->mei_dev, data, lc_init); in hdcp2_prepare_lc_init()
1243 drm_dbg_kms(&dev_priv->drm, "Prepare lc_init failed. %d\n", in hdcp2_prepare_lc_init()
1245 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_lc_init()
1255 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_verify_lprime()
1256 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_lprime()
1260 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_lprime()
1261 comp = dev_priv->hdcp_master; in hdcp2_verify_lprime()
1263 if (!comp || !comp->ops) { in hdcp2_verify_lprime()
1264 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_lprime()
1265 return -EINVAL; in hdcp2_verify_lprime()
1268 ret = comp->ops->verify_lprime(comp->mei_dev, data, rx_lprime); in hdcp2_verify_lprime()
1270 drm_dbg_kms(&dev_priv->drm, "Verify L_Prime failed. %d\n", in hdcp2_verify_lprime()
1272 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_lprime()
1281 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_prepare_skey()
1282 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_skey()
1286 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_skey()
1287 comp = dev_priv->hdcp_master; in hdcp2_prepare_skey()
1289 if (!comp || !comp->ops) { in hdcp2_prepare_skey()
1290 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_skey()
1291 return -EINVAL; in hdcp2_prepare_skey()
1294 ret = comp->ops->get_session_key(comp->mei_dev, data, ske_data); in hdcp2_prepare_skey()
1296 drm_dbg_kms(&dev_priv->drm, "Get session key failed. %d\n", in hdcp2_prepare_skey()
1298 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_prepare_skey()
1310 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_verify_rep_topology_prepare_ack()
1311 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_rep_topology_prepare_ack()
1315 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rep_topology_prepare_ack()
1316 comp = dev_priv->hdcp_master; in hdcp2_verify_rep_topology_prepare_ack()
1318 if (!comp || !comp->ops) { in hdcp2_verify_rep_topology_prepare_ack()
1319 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rep_topology_prepare_ack()
1320 return -EINVAL; in hdcp2_verify_rep_topology_prepare_ack()
1323 ret = comp->ops->repeater_check_flow_prepare_ack(comp->mei_dev, data, in hdcp2_verify_rep_topology_prepare_ack()
1327 drm_dbg_kms(&dev_priv->drm, in hdcp2_verify_rep_topology_prepare_ack()
1328 "Verify rep topology failed. %d\n", ret); in hdcp2_verify_rep_topology_prepare_ack()
1329 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_rep_topology_prepare_ack()
1339 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_verify_mprime()
1340 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_mprime()
1344 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_mprime()
1345 comp = dev_priv->hdcp_master; in hdcp2_verify_mprime()
1347 if (!comp || !comp->ops) { in hdcp2_verify_mprime()
1348 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_mprime()
1349 return -EINVAL; in hdcp2_verify_mprime()
1352 ret = comp->ops->verify_mprime(comp->mei_dev, data, stream_ready); in hdcp2_verify_mprime()
1354 drm_dbg_kms(&dev_priv->drm, "Verify mprime failed. %d\n", ret); in hdcp2_verify_mprime()
1355 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_verify_mprime()
1363 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_authenticate_port()
1364 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authenticate_port()
1368 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_authenticate_port()
1369 comp = dev_priv->hdcp_master; in hdcp2_authenticate_port()
1371 if (!comp || !comp->ops) { in hdcp2_authenticate_port()
1372 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_authenticate_port()
1373 return -EINVAL; in hdcp2_authenticate_port()
1376 ret = comp->ops->enable_hdcp_authentication(comp->mei_dev, data); in hdcp2_authenticate_port()
1378 drm_dbg_kms(&dev_priv->drm, "Enable hdcp auth failed. %d\n", in hdcp2_authenticate_port()
1380 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_authenticate_port()
1388 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_close_mei_session()
1392 mutex_lock(&dev_priv->hdcp_comp_mutex); in hdcp2_close_mei_session()
1393 comp = dev_priv->hdcp_master; in hdcp2_close_mei_session()
1395 if (!comp || !comp->ops) { in hdcp2_close_mei_session()
1396 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_close_mei_session()
1397 return -EINVAL; in hdcp2_close_mei_session()
1400 ret = comp->ops->close_hdcp_session(comp->mei_dev, in hdcp2_close_mei_session()
1401 &dig_port->hdcp_port_data); in hdcp2_close_mei_session()
1402 mutex_unlock(&dev_priv->hdcp_comp_mutex); in hdcp2_close_mei_session()
1416 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authentication_key_exchange()
1417 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authentication_key_exchange()
1425 const struct intel_hdcp_shim *shim = hdcp->shim; in hdcp2_authentication_key_exchange()
1430 hdcp->seq_num_v = 0; in hdcp2_authentication_key_exchange()
1431 hdcp->seq_num_m = 0; in hdcp2_authentication_key_exchange()
1437 ret = shim->write_2_2_msg(dig_port, &msgs.ake_init, in hdcp2_authentication_key_exchange()
1442 ret = shim->read_2_2_msg(dig_port, HDCP_2_2_AKE_SEND_CERT, in hdcp2_authentication_key_exchange()
1448 drm_dbg_kms(&dev_priv->drm, "cert.rx_caps dont claim HDCP2.2\n"); in hdcp2_authentication_key_exchange()
1449 return -EINVAL; in hdcp2_authentication_key_exchange()
1452 hdcp->is_repeater = HDCP_2_2_RX_REPEATER(msgs.send_cert.rx_caps[2]); in hdcp2_authentication_key_exchange()
1454 if (drm_hdcp_check_ksvs_revoked(&dev_priv->drm, in hdcp2_authentication_key_exchange()
1457 drm_err(&dev_priv->drm, "Receiver ID is revoked\n"); in hdcp2_authentication_key_exchange()
1458 return -EPERM; in hdcp2_authentication_key_exchange()
1466 &hdcp->is_paired, in hdcp2_authentication_key_exchange()
1471 ret = shim->write_2_2_msg(dig_port, &msgs.no_stored_km, size); in hdcp2_authentication_key_exchange()
1475 ret = shim->read_2_2_msg(dig_port, HDCP_2_2_AKE_SEND_HPRIME, in hdcp2_authentication_key_exchange()
1484 if (!hdcp->is_paired) { in hdcp2_authentication_key_exchange()
1486 ret = shim->read_2_2_msg(dig_port, in hdcp2_authentication_key_exchange()
1496 hdcp->is_paired = true; in hdcp2_authentication_key_exchange()
1505 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_locality_check()
1510 const struct intel_hdcp_shim *shim = hdcp->shim; in hdcp2_locality_check()
1518 ret = shim->write_2_2_msg(dig_port, &msgs.lc_init, in hdcp2_locality_check()
1523 ret = shim->read_2_2_msg(dig_port, in hdcp2_locality_check()
1541 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_session_key_exchange()
1549 ret = hdcp->shim->write_2_2_msg(dig_port, &send_eks, in hdcp2_session_key_exchange()
1561 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in _hdcp2_propagate_stream_management_info()
1562 struct intel_hdcp *hdcp = &connector->hdcp; in _hdcp2_propagate_stream_management_info()
1567 const struct intel_hdcp_shim *shim = hdcp->shim; in _hdcp2_propagate_stream_management_info()
1570 if (connector->hdcp.seq_num_m > HDCP_2_2_SEQ_NUM_MAX) in _hdcp2_propagate_stream_management_info()
1571 return -ERANGE; in _hdcp2_propagate_stream_management_info()
1575 drm_hdcp_cpu_to_be24(msgs.stream_manage.seq_num_m, hdcp->seq_num_m); in _hdcp2_propagate_stream_management_info()
1577 msgs.stream_manage.k = cpu_to_be16(data->k); in _hdcp2_propagate_stream_management_info()
1579 for (i = 0; i < data->k; i++) { in _hdcp2_propagate_stream_management_info()
1580 msgs.stream_manage.streams[i].stream_id = data->streams[i].stream_id; in _hdcp2_propagate_stream_management_info()
1581 msgs.stream_manage.streams[i].stream_type = data->streams[i].stream_type; in _hdcp2_propagate_stream_management_info()
1584 streams_size_delta = (HDCP_2_2_MAX_CONTENT_STREAMS_CNT - data->k) * in _hdcp2_propagate_stream_management_info()
1587 ret = shim->write_2_2_msg(dig_port, &msgs.stream_manage, in _hdcp2_propagate_stream_management_info()
1588 sizeof(msgs.stream_manage) - streams_size_delta); in _hdcp2_propagate_stream_management_info()
1592 ret = shim->read_2_2_msg(dig_port, HDCP_2_2_REP_STREAM_READY, in _hdcp2_propagate_stream_management_info()
1597 data->seq_num_m = hdcp->seq_num_m; in _hdcp2_propagate_stream_management_info()
1602 hdcp->seq_num_m++; in _hdcp2_propagate_stream_management_info()
1611 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authenticate_repeater_topology()
1612 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authenticate_repeater_topology()
1617 const struct intel_hdcp_shim *shim = hdcp->shim; in hdcp2_authenticate_repeater_topology()
1622 ret = shim->read_2_2_msg(dig_port, HDCP_2_2_REP_SEND_RECVID_LIST, in hdcp2_authenticate_repeater_topology()
1631 drm_dbg_kms(&dev_priv->drm, "Topology Max Size Exceeded\n"); in hdcp2_authenticate_repeater_topology()
1632 return -EINVAL; in hdcp2_authenticate_repeater_topology()
1639 if (!hdcp->hdcp2_encrypted && seq_num_v) { in hdcp2_authenticate_repeater_topology()
1640 drm_dbg_kms(&dev_priv->drm, in hdcp2_authenticate_repeater_topology()
1642 return -EINVAL; in hdcp2_authenticate_repeater_topology()
1645 if (seq_num_v < hdcp->seq_num_v) { in hdcp2_authenticate_repeater_topology()
1647 drm_dbg_kms(&dev_priv->drm, "Seq_num_v roll over.\n"); in hdcp2_authenticate_repeater_topology()
1648 return -EINVAL; in hdcp2_authenticate_repeater_topology()
1653 if (drm_hdcp_check_ksvs_revoked(&dev_priv->drm, in hdcp2_authenticate_repeater_topology()
1656 drm_err(&dev_priv->drm, "Revoked receiver ID(s) is in list\n"); in hdcp2_authenticate_repeater_topology()
1657 return -EPERM; in hdcp2_authenticate_repeater_topology()
1666 hdcp->seq_num_v = seq_num_v; in hdcp2_authenticate_repeater_topology()
1667 ret = shim->write_2_2_msg(dig_port, &msgs.rep_ack, in hdcp2_authenticate_repeater_topology()
1678 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_authenticate_sink()
1679 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authenticate_sink()
1680 const struct intel_hdcp_shim *shim = hdcp->shim; in hdcp2_authenticate_sink()
1685 drm_dbg_kms(&i915->drm, "AKE Failed. Err : %d\n", ret); in hdcp2_authenticate_sink()
1691 drm_dbg_kms(&i915->drm, in hdcp2_authenticate_sink()
1698 drm_dbg_kms(&i915->drm, "SKE Failed. Err : %d\n", ret); in hdcp2_authenticate_sink()
1702 if (shim->config_stream_type) { in hdcp2_authenticate_sink()
1703 ret = shim->config_stream_type(dig_port, in hdcp2_authenticate_sink()
1704 hdcp->is_repeater, in hdcp2_authenticate_sink()
1705 hdcp->content_type); in hdcp2_authenticate_sink()
1710 if (hdcp->is_repeater) { in hdcp2_authenticate_sink()
1713 drm_dbg_kms(&i915->drm, in hdcp2_authenticate_sink()
1725 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_enable_stream_encryption()
1726 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in hdcp2_enable_stream_encryption()
1727 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_enable_stream_encryption()
1728 enum transcoder cpu_transcoder = hdcp->cpu_transcoder; in hdcp2_enable_stream_encryption()
1729 enum port port = dig_port->base.port; in hdcp2_enable_stream_encryption()
1734 drm_err(&dev_priv->drm, "[%s:%d] HDCP 2.2 Link is not encrypted\n", in hdcp2_enable_stream_encryption()
1735 connector->base.name, connector->base.base.id); in hdcp2_enable_stream_encryption()
1736 ret = -EPERM; in hdcp2_enable_stream_encryption()
1740 if (hdcp->shim->stream_2_2_encryption) { in hdcp2_enable_stream_encryption()
1741 ret = hdcp->shim->stream_2_2_encryption(connector, true); in hdcp2_enable_stream_encryption()
1743 drm_err(&dev_priv->drm, "[%s:%d] Failed to enable HDCP 2.2 stream enc\n", in hdcp2_enable_stream_encryption()
1744 connector->base.name, connector->base.base.id); in hdcp2_enable_stream_encryption()
1747 drm_dbg_kms(&dev_priv->drm, "HDCP 2.2 transcoder: %s stream encrypted\n", in hdcp2_enable_stream_encryption()
1748 transcoder_name(hdcp->stream_transcoder)); in hdcp2_enable_stream_encryption()
1755 drm_dbg_kms(&dev_priv->drm, "Port deauth failed.\n"); in hdcp2_enable_stream_encryption()
1757 dig_port->hdcp_auth_status = false; in hdcp2_enable_stream_encryption()
1758 data->k = 0; in hdcp2_enable_stream_encryption()
1766 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_enable_encryption()
1767 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_enable_encryption()
1768 enum port port = dig_port->base.port; in hdcp2_enable_encryption()
1769 enum transcoder cpu_transcoder = hdcp->cpu_transcoder; in hdcp2_enable_encryption()
1772 drm_WARN_ON(&dev_priv->drm, in hdcp2_enable_encryption()
1775 if (hdcp->shim->toggle_signalling) { in hdcp2_enable_encryption()
1776 ret = hdcp->shim->toggle_signalling(dig_port, cpu_transcoder, in hdcp2_enable_encryption()
1779 drm_err(&dev_priv->drm, in hdcp2_enable_encryption()
1799 dig_port->hdcp_auth_status = true; in hdcp2_enable_encryption()
1807 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_disable_encryption()
1808 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_disable_encryption()
1809 enum port port = dig_port->base.port; in hdcp2_disable_encryption()
1810 enum transcoder cpu_transcoder = hdcp->cpu_transcoder; in hdcp2_disable_encryption()
1813 …drm_WARN_ON(&dev_priv->drm, !(intel_de_read(dev_priv, HDCP2_STATUS(dev_priv, cpu_transcoder, port)… in hdcp2_disable_encryption()
1824 if (ret == -ETIMEDOUT) in hdcp2_disable_encryption()
1825 drm_dbg_kms(&dev_priv->drm, "Disable Encryption Timedout"); in hdcp2_disable_encryption()
1827 if (hdcp->shim->toggle_signalling) { in hdcp2_disable_encryption()
1828 ret = hdcp->shim->toggle_signalling(dig_port, cpu_transcoder, in hdcp2_disable_encryption()
1831 drm_err(&dev_priv->drm, in hdcp2_disable_encryption()
1844 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_propagate_stream_management_info()
1847 if (!connector->hdcp.is_repeater) in hdcp2_propagate_stream_management_info()
1856 if (connector->hdcp.seq_num_m > HDCP_2_2_SEQ_NUM_MAX) { in hdcp2_propagate_stream_management_info()
1857 drm_dbg_kms(&i915->drm, in hdcp2_propagate_stream_management_info()
1862 drm_dbg_kms(&i915->drm, in hdcp2_propagate_stream_management_info()
1873 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_authenticate_and_encrypt()
1876 for (i = 0; i < tries && !dig_port->hdcp_auth_status; i++) { in hdcp2_authenticate_and_encrypt()
1881 drm_dbg_kms(&i915->drm, in hdcp2_authenticate_and_encrypt()
1890 drm_dbg_kms(&i915->drm, "HDCP2 port auth failed.(%d)\n", in hdcp2_authenticate_and_encrypt()
1895 drm_dbg_kms(&i915->drm, "HDCP2.2 Auth %d of %d Failed.(%d)\n", in hdcp2_authenticate_and_encrypt()
1898 drm_dbg_kms(&i915->drm, "Port deauth failed.\n"); in hdcp2_authenticate_and_encrypt()
1901 if (!ret && !dig_port->hdcp_auth_status) { in hdcp2_authenticate_and_encrypt()
1909 drm_dbg_kms(&i915->drm, in hdcp2_authenticate_and_encrypt()
1912 drm_dbg_kms(&i915->drm, "Port deauth failed.\n"); in hdcp2_authenticate_and_encrypt()
1925 struct drm_i915_private *i915 = to_i915(connector->base.dev); in _intel_hdcp2_enable()
1926 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in _intel_hdcp2_enable()
1927 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp2_enable()
1930 drm_dbg_kms(&i915->drm, "[%s:%d] HDCP2.2 is being enabled. Type: %d\n", in _intel_hdcp2_enable()
1931 connector->base.name, connector->base.base.id, in _intel_hdcp2_enable()
1932 hdcp->content_type); in _intel_hdcp2_enable()
1936 data->k = 1; in _intel_hdcp2_enable()
1937 data->streams[0].stream_type = hdcp->content_type; in _intel_hdcp2_enable()
1946 drm_dbg_kms(&i915->drm, "HDCP2 Type%d Enabling Failed. (%d)\n", in _intel_hdcp2_enable()
1947 hdcp->content_type, ret); in _intel_hdcp2_enable()
1951 drm_dbg_kms(&i915->drm, "[%s:%d] HDCP2.2 is enabled. Type %d\n", in _intel_hdcp2_enable()
1952 connector->base.name, connector->base.base.id, in _intel_hdcp2_enable()
1953 hdcp->content_type); in _intel_hdcp2_enable()
1955 hdcp->hdcp2_encrypted = true; in _intel_hdcp2_enable()
1963 struct drm_i915_private *i915 = to_i915(connector->base.dev); in _intel_hdcp2_disable()
1964 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in _intel_hdcp2_disable()
1965 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp2_disable()
1968 drm_dbg_kms(&i915->drm, "[%s:%d] HDCP2.2 is being Disabled\n", in _intel_hdcp2_disable()
1969 connector->base.name, connector->base.base.id); in _intel_hdcp2_disable()
1971 if (hdcp->shim->stream_2_2_encryption) { in _intel_hdcp2_disable()
1972 ret = hdcp->shim->stream_2_2_encryption(connector, false); in _intel_hdcp2_disable()
1974 drm_err(&i915->drm, "[%s:%d] Failed to disable HDCP 2.2 stream enc\n", in _intel_hdcp2_disable()
1975 connector->base.name, connector->base.base.id); in _intel_hdcp2_disable()
1978 drm_dbg_kms(&i915->drm, "HDCP 2.2 transcoder: %s stream encryption disabled\n", in _intel_hdcp2_disable()
1979 transcoder_name(hdcp->stream_transcoder)); in _intel_hdcp2_disable()
1981 if (dig_port->num_hdcp_streams > 0 && !hdcp2_link_recovery) in _intel_hdcp2_disable()
1988 drm_dbg_kms(&i915->drm, "Port deauth failed.\n"); in _intel_hdcp2_disable()
1990 connector->hdcp.hdcp2_encrypted = false; in _intel_hdcp2_disable()
1991 dig_port->hdcp_auth_status = false; in _intel_hdcp2_disable()
1992 data->k = 0; in _intel_hdcp2_disable()
2001 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp2_check_link()
2002 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_check_link()
2003 enum port port = dig_port->base.port; in intel_hdcp2_check_link()
2007 mutex_lock(&hdcp->mutex); in intel_hdcp2_check_link()
2008 mutex_lock(&dig_port->hdcp_mutex); in intel_hdcp2_check_link()
2009 cpu_transcoder = hdcp->cpu_transcoder; in intel_hdcp2_check_link()
2012 if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_ENABLED || in intel_hdcp2_check_link()
2013 !hdcp->hdcp2_encrypted) { in intel_hdcp2_check_link()
2014 ret = -EINVAL; in intel_hdcp2_check_link()
2018 if (drm_WARN_ON(&dev_priv->drm, in intel_hdcp2_check_link()
2020 drm_err(&dev_priv->drm, in intel_hdcp2_check_link()
2023 ret = -ENXIO; in intel_hdcp2_check_link()
2031 ret = hdcp->shim->check_2_2_link(dig_port, connector); in intel_hdcp2_check_link()
2033 if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) { in intel_hdcp2_check_link()
2042 if (hdcp->value == DRM_MODE_CONTENT_PROTECTION_UNDESIRED) in intel_hdcp2_check_link()
2045 drm_dbg_kms(&dev_priv->drm, in intel_hdcp2_check_link()
2046 "HDCP2.2 Downstream topology change\n"); in intel_hdcp2_check_link()
2054 drm_dbg_kms(&dev_priv->drm, in intel_hdcp2_check_link()
2055 "[%s:%d] Repeater topology auth failed.(%d)\n", in intel_hdcp2_check_link()
2056 connector->base.name, connector->base.base.id, in intel_hdcp2_check_link()
2059 drm_dbg_kms(&dev_priv->drm, in intel_hdcp2_check_link()
2061 connector->base.name, connector->base.base.id); in intel_hdcp2_check_link()
2066 drm_err(&dev_priv->drm, in intel_hdcp2_check_link()
2068 connector->base.name, connector->base.base.id, ret); in intel_hdcp2_check_link()
2076 drm_dbg_kms(&dev_priv->drm, in intel_hdcp2_check_link()
2078 connector->base.name, connector->base.base.id, in intel_hdcp2_check_link()
2087 mutex_unlock(&dig_port->hdcp_mutex); in intel_hdcp2_check_link()
2088 mutex_unlock(&hdcp->mutex); in intel_hdcp2_check_link()
2099 if (drm_connector_is_unregistered(&connector->base)) in intel_hdcp_check_work()
2103 schedule_delayed_work(&hdcp->check_work, in intel_hdcp_check_work()
2106 schedule_delayed_work(&hdcp->check_work, in intel_hdcp_check_work()
2115 drm_dbg(&dev_priv->drm, "I915 HDCP comp bind\n"); in i915_hdcp_component_bind()
2116 mutex_lock(&dev_priv->hdcp_comp_mutex); in i915_hdcp_component_bind()
2117 dev_priv->hdcp_master = (struct i915_hdcp_comp_master *)data; in i915_hdcp_component_bind()
2118 dev_priv->hdcp_master->mei_dev = mei_kdev; in i915_hdcp_component_bind()
2119 mutex_unlock(&dev_priv->hdcp_comp_mutex); in i915_hdcp_component_bind()
2129 drm_dbg(&dev_priv->drm, "I915 HDCP comp unbind\n"); in i915_hdcp_component_unbind()
2130 mutex_lock(&dev_priv->hdcp_comp_mutex); in i915_hdcp_component_unbind()
2131 dev_priv->hdcp_master = NULL; in i915_hdcp_component_unbind()
2132 mutex_unlock(&dev_priv->hdcp_comp_mutex); in i915_hdcp_component_unbind()
2166 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in initialize_hdcp_port_data()
2167 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in initialize_hdcp_port_data()
2168 struct intel_hdcp *hdcp = &connector->hdcp; in initialize_hdcp_port_data()
2169 enum port port = dig_port->base.port; in initialize_hdcp_port_data()
2172 data->fw_ddi = intel_get_mei_fw_ddi_index(port); in initialize_hdcp_port_data()
2178 data->fw_ddi = MEI_DDI_INVALID_PORT; in initialize_hdcp_port_data()
2185 data->fw_tc = MEI_INVALID_TRANSCODER; in initialize_hdcp_port_data()
2187 data->port_type = (u8)HDCP_PORT_TYPE_INTEGRATED; in initialize_hdcp_port_data()
2188 data->protocol = (u8)shim->protocol; in initialize_hdcp_port_data()
2190 if (!data->streams) in initialize_hdcp_port_data()
2191 data->streams = kcalloc(INTEL_NUM_PIPES(dev_priv), in initialize_hdcp_port_data()
2194 if (!data->streams) { in initialize_hdcp_port_data()
2195 drm_err(&dev_priv->drm, "Out of Memory\n"); in initialize_hdcp_port_data()
2196 return -ENOMEM; in initialize_hdcp_port_data()
2199 data->streams[0].stream_id = 0; in initialize_hdcp_port_data()
2200 data->streams[0].stream_type = hdcp->content_type; in initialize_hdcp_port_data()
2223 mutex_lock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_init()
2224 drm_WARN_ON(&dev_priv->drm, dev_priv->hdcp_comp_added); in intel_hdcp_component_init()
2226 dev_priv->hdcp_comp_added = true; in intel_hdcp_component_init()
2227 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_init()
2228 ret = component_add_typed(dev_priv->drm.dev, &i915_hdcp_component_ops, in intel_hdcp_component_init()
2231 drm_dbg_kms(&dev_priv->drm, "Failed at component add(%d)\n", in intel_hdcp_component_init()
2233 mutex_lock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_init()
2234 dev_priv->hdcp_comp_added = false; in intel_hdcp_component_init()
2235 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_init()
2244 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_hdcp2_init()
2245 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_init()
2250 drm_dbg_kms(&i915->drm, "Mei hdcp data init failed\n"); in intel_hdcp2_init()
2254 hdcp->hdcp2_supported = true; in intel_hdcp2_init()
2261 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_init()
2262 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_init()
2266 return -EINVAL; in intel_hdcp_init()
2272 drm_connector_attach_content_protection_property(&connector->base, in intel_hdcp_init()
2273 hdcp->hdcp2_supported); in intel_hdcp_init()
2275 hdcp->hdcp2_supported = false; in intel_hdcp_init()
2276 kfree(dig_port->hdcp_port_data.streams); in intel_hdcp_init()
2280 hdcp->shim = shim; in intel_hdcp_init()
2281 mutex_init(&hdcp->mutex); in intel_hdcp_init()
2282 INIT_DELAYED_WORK(&hdcp->check_work, intel_hdcp_check_work); in intel_hdcp_init()
2283 INIT_WORK(&hdcp->prop_work, intel_hdcp_prop_work); in intel_hdcp_init()
2284 init_waitqueue_head(&hdcp->cp_irq_queue); in intel_hdcp_init()
2292 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_enable()
2294 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_enable()
2296 int ret = -EINVAL; in intel_hdcp_enable()
2298 if (!hdcp->shim) in intel_hdcp_enable()
2299 return -ENOENT; in intel_hdcp_enable()
2301 if (!connector->encoder) { in intel_hdcp_enable()
2302 drm_err(&dev_priv->drm, "[%s:%d] encoder is not initialized\n", in intel_hdcp_enable()
2303 connector->base.name, connector->base.base.id); in intel_hdcp_enable()
2304 return -ENODEV; in intel_hdcp_enable()
2307 mutex_lock(&hdcp->mutex); in intel_hdcp_enable()
2308 mutex_lock(&dig_port->hdcp_mutex); in intel_hdcp_enable()
2309 drm_WARN_ON(&dev_priv->drm, in intel_hdcp_enable()
2310 hdcp->value == DRM_MODE_CONTENT_PROTECTION_ENABLED); in intel_hdcp_enable()
2311 hdcp->content_type = content_type; in intel_hdcp_enable()
2314 hdcp->cpu_transcoder = pipe_config->mst_master_transcoder; in intel_hdcp_enable()
2315 hdcp->stream_transcoder = pipe_config->cpu_transcoder; in intel_hdcp_enable()
2317 hdcp->cpu_transcoder = pipe_config->cpu_transcoder; in intel_hdcp_enable()
2318 hdcp->stream_transcoder = INVALID_TRANSCODER; in intel_hdcp_enable()
2322 dig_port->hdcp_port_data.fw_tc = intel_get_mei_fw_tc(hdcp->cpu_transcoder); in intel_hdcp_enable()
2339 hdcp->content_type != DRM_MODE_HDCP_CONTENT_TYPE1) { in intel_hdcp_enable()
2344 schedule_delayed_work(&hdcp->check_work, check_link_interval); in intel_hdcp_enable()
2350 mutex_unlock(&dig_port->hdcp_mutex); in intel_hdcp_enable()
2351 mutex_unlock(&hdcp->mutex); in intel_hdcp_enable()
2358 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_disable()
2361 if (!hdcp->shim) in intel_hdcp_disable()
2362 return -ENOENT; in intel_hdcp_disable()
2364 mutex_lock(&hdcp->mutex); in intel_hdcp_disable()
2365 mutex_lock(&dig_port->hdcp_mutex); in intel_hdcp_disable()
2367 if (hdcp->value == DRM_MODE_CONTENT_PROTECTION_UNDESIRED) in intel_hdcp_disable()
2372 if (hdcp->hdcp2_encrypted) in intel_hdcp_disable()
2374 else if (hdcp->hdcp_encrypted) in intel_hdcp_disable()
2378 mutex_unlock(&dig_port->hdcp_mutex); in intel_hdcp_disable()
2379 mutex_unlock(&hdcp->mutex); in intel_hdcp_disable()
2380 cancel_delayed_work_sync(&hdcp->check_work); in intel_hdcp_disable()
2390 to_intel_connector(conn_state->connector); in intel_hdcp_update_pipe()
2391 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_update_pipe()
2394 if (!connector->hdcp.shim) in intel_hdcp_update_pipe()
2398 (conn_state->hdcp_content_type != hdcp->content_type && in intel_hdcp_update_pipe()
2399 conn_state->content_protection != in intel_hdcp_update_pipe()
2406 if (conn_state->content_protection == in intel_hdcp_update_pipe()
2416 mutex_lock(&hdcp->mutex); in intel_hdcp_update_pipe()
2417 hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED; in intel_hdcp_update_pipe()
2418 drm_connector_get(&connector->base); in intel_hdcp_update_pipe()
2419 schedule_work(&hdcp->prop_work); in intel_hdcp_update_pipe()
2420 mutex_unlock(&hdcp->mutex); in intel_hdcp_update_pipe()
2423 if (conn_state->content_protection == in intel_hdcp_update_pipe()
2425 mutex_lock(&hdcp->mutex); in intel_hdcp_update_pipe()
2428 hdcp->value != DRM_MODE_CONTENT_PROTECTION_ENABLED; in intel_hdcp_update_pipe()
2429 mutex_unlock(&hdcp->mutex); in intel_hdcp_update_pipe()
2435 drm_connector_get(&connector->base); in intel_hdcp_update_pipe()
2436 schedule_work(&hdcp->prop_work); in intel_hdcp_update_pipe()
2443 (u8)conn_state->hdcp_content_type); in intel_hdcp_update_pipe()
2448 mutex_lock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_fini()
2449 if (!dev_priv->hdcp_comp_added) { in intel_hdcp_component_fini()
2450 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_fini()
2454 dev_priv->hdcp_comp_added = false; in intel_hdcp_component_fini()
2455 mutex_unlock(&dev_priv->hdcp_comp_mutex); in intel_hdcp_component_fini()
2457 component_del(dev_priv->drm.dev, &i915_hdcp_component_ops); in intel_hdcp_component_fini()
2462 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_cleanup()
2464 if (!hdcp->shim) in intel_hdcp_cleanup()
2469 * off another HDCP enable, which would re-spawn the workers. in intel_hdcp_cleanup()
2471 drm_WARN_ON(connector->base.dev, in intel_hdcp_cleanup()
2472 connector->base.registration_state == DRM_CONNECTOR_REGISTERED); in intel_hdcp_cleanup()
2478 cancel_delayed_work_sync(&hdcp->check_work); in intel_hdcp_cleanup()
2489 drm_WARN_ON(connector->base.dev, work_pending(&hdcp->prop_work)); in intel_hdcp_cleanup()
2491 mutex_lock(&hdcp->mutex); in intel_hdcp_cleanup()
2492 hdcp->shim = NULL; in intel_hdcp_cleanup()
2493 mutex_unlock(&hdcp->mutex); in intel_hdcp_cleanup()
2500 u64 old_cp = old_state->content_protection; in intel_hdcp_atomic_check()
2501 u64 new_cp = new_state->content_protection; in intel_hdcp_atomic_check()
2504 if (!new_state->crtc) { in intel_hdcp_atomic_check()
2507 * desired so it's re-enabled when the connector is brought back in intel_hdcp_atomic_check()
2510 new_state->content_protection = in intel_hdcp_atomic_check()
2515 crtc_state = drm_atomic_get_new_crtc_state(new_state->state, in intel_hdcp_atomic_check()
2516 new_state->crtc); in intel_hdcp_atomic_check()
2520 * need to be sent if there is transition from ENABLED->DESIRED. in intel_hdcp_atomic_check()
2525 new_state->content_protection = in intel_hdcp_atomic_check()
2535 if (old_state->hdcp_content_type == in intel_hdcp_atomic_check()
2536 new_state->hdcp_content_type) in intel_hdcp_atomic_check()
2540 crtc_state->mode_changed = true; in intel_hdcp_atomic_check()
2546 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_handle_cp_irq()
2548 if (!hdcp->shim) in intel_hdcp_handle_cp_irq()
2551 atomic_inc(&connector->hdcp.cp_irq_count); in intel_hdcp_handle_cp_irq()
2552 wake_up_all(&connector->hdcp.cp_irq_queue); in intel_hdcp_handle_cp_irq()
2554 schedule_delayed_work(&hdcp->check_work, 0); in intel_hdcp_handle_cp_irq()