Lines Matching +full:dp +full:- +full:connector

1 /* SPDX-License-Identifier: MIT */
43 #define C (hdcp->cp_irq_count_cached != atomic_read(&hdcp->cp_irq_count)) in intel_dp_hdcp_wait_for_cp_irq()
44 ret = wait_event_interruptible_timeout(hdcp->cp_irq_queue, C, in intel_dp_hdcp_wait_for_cp_irq()
55 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_write_an_aksv()
60 dpcd_ret = drm_dp_dpcd_write(&dig_port->dp.aux, DP_AUX_HDCP_AN, in intel_dp_hdcp_write_an_aksv()
63 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_write_an_aksv()
64 "Failed to write An over DP/AUX (%zd)\n", in intel_dp_hdcp_write_an_aksv()
66 return dpcd_ret >= 0 ? -EIO : dpcd_ret; in intel_dp_hdcp_write_an_aksv()
70 * Since Aksv is Oh-So-Secret, we can't access it in software. So we in intel_dp_hdcp_write_an_aksv()
71 * send an empty buffer of the correct length through the DP helpers. On in intel_dp_hdcp_write_an_aksv()
76 dpcd_ret = drm_dp_dpcd_write(&dig_port->dp.aux, DP_AUX_HDCP_AKSV, in intel_dp_hdcp_write_an_aksv()
79 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_write_an_aksv()
80 "Failed to write Aksv over DP/AUX (%zd)\n", in intel_dp_hdcp_write_an_aksv()
82 return dpcd_ret >= 0 ? -EIO : dpcd_ret; in intel_dp_hdcp_write_an_aksv()
90 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_bksv()
93 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_BKSV, bksv, in intel_dp_hdcp_read_bksv()
96 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_bksv()
97 "Read Bksv from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp_read_bksv()
98 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_bksv()
106 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_bstatus()
110 * For some reason the HDMI and DP HDCP specs call this register in intel_dp_hdcp_read_bstatus()
112 * but in DP it's called BINFO. in intel_dp_hdcp_read_bstatus()
114 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_BINFO, in intel_dp_hdcp_read_bstatus()
117 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_bstatus()
118 "Read bstatus from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp_read_bstatus()
119 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_bstatus()
128 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_bcaps()
131 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_BCAPS, in intel_dp_hdcp_read_bcaps()
134 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_bcaps()
135 "Read bcaps from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp_read_bcaps()
136 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_bcaps()
161 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_ri_prime()
164 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_RI_PRIME, in intel_dp_hdcp_read_ri_prime()
167 drm_dbg_kms(&i915->drm, "Read Ri' from DP/AUX failed (%zd)\n", in intel_dp_hdcp_read_ri_prime()
169 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_ri_prime()
178 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_ksv_ready()
182 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_BSTATUS, in intel_dp_hdcp_read_ksv_ready()
185 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_ksv_ready()
186 "Read bstatus from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp_read_ksv_ready()
187 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_ksv_ready()
197 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_ksv_fifo()
203 size_t len = min(num_downstream - i, 3) * DRM_HDCP_KSV_LEN; in intel_dp_hdcp_read_ksv_fifo()
204 ret = drm_dp_dpcd_read(&dig_port->dp.aux, in intel_dp_hdcp_read_ksv_fifo()
209 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_ksv_fifo()
210 "Read ksv[%d] from DP/AUX failed (%zd)\n", in intel_dp_hdcp_read_ksv_fifo()
212 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_ksv_fifo()
222 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_read_v_prime_part()
226 return -EINVAL; in intel_dp_hdcp_read_v_prime_part()
228 ret = drm_dp_dpcd_read(&dig_port->dp.aux, in intel_dp_hdcp_read_v_prime_part()
232 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_read_v_prime_part()
233 "Read v'[%d] from DP/AUX failed (%zd)\n", i, ret); in intel_dp_hdcp_read_v_prime_part()
234 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp_read_v_prime_part()
250 struct intel_connector *connector) in intel_dp_hdcp_check_link() argument
252 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp_check_link()
256 ret = drm_dp_dpcd_read(&dig_port->dp.aux, DP_AUX_HDCP_BSTATUS, in intel_dp_hdcp_check_link()
259 drm_dbg_kms(&i915->drm, in intel_dp_hdcp_check_link()
260 "Read bstatus from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp_check_link()
334 intel_dp_hdcp2_read_rx_status(struct intel_connector *connector, in intel_dp_hdcp2_read_rx_status() argument
337 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_hdcp2_read_rx_status()
338 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_hdcp2_read_rx_status()
339 struct drm_dp_aux *aux = &dig_port->dp.aux; in intel_dp_hdcp2_read_rx_status()
346 drm_dbg_kms(&i915->drm, in intel_dp_hdcp2_read_rx_status()
347 "Read bstatus from DP/AUX failed (%zd)\n", ret); in intel_dp_hdcp2_read_rx_status()
348 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp2_read_rx_status()
355 int hdcp2_detect_msg_availability(struct intel_connector *connector, in hdcp2_detect_msg_availability() argument
362 ret = intel_dp_hdcp2_read_rx_status(connector, &rx_status); in hdcp2_detect_msg_availability()
381 return -EINVAL; in hdcp2_detect_msg_availability()
388 intel_dp_hdcp2_wait_for_msg(struct intel_connector *connector, in intel_dp_hdcp2_wait_for_msg() argument
391 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_hdcp2_wait_for_msg()
392 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_hdcp2_wait_for_msg()
393 struct intel_dp *dp = &dig_port->dp; in intel_dp_hdcp2_wait_for_msg() local
394 struct intel_hdcp *hdcp = &dp->attached_connector->hdcp; in intel_dp_hdcp2_wait_for_msg()
395 u8 msg_id = hdcp2_msg_data->msg_id; in intel_dp_hdcp2_wait_for_msg()
399 if (msg_id == HDCP_2_2_AKE_SEND_HPRIME && !hdcp->is_paired) in intel_dp_hdcp2_wait_for_msg()
400 timeout = hdcp2_msg_data->timeout2; in intel_dp_hdcp2_wait_for_msg()
402 timeout = hdcp2_msg_data->timeout; in intel_dp_hdcp2_wait_for_msg()
408 if (!hdcp2_msg_data->msg_detectable) { in intel_dp_hdcp2_wait_for_msg()
417 ret = hdcp2_detect_msg_availability(connector, msg_id, in intel_dp_hdcp2_wait_for_msg()
420 ret = -ETIMEDOUT; in intel_dp_hdcp2_wait_for_msg()
424 drm_dbg_kms(&i915->drm, in intel_dp_hdcp2_wait_for_msg()
426 hdcp2_msg_data->msg_id, ret, timeout); in intel_dp_hdcp2_wait_for_msg()
443 int intel_dp_hdcp2_write_msg(struct intel_connector *connector, in intel_dp_hdcp2_write_msg() argument
449 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_hdcp2_write_msg()
450 struct drm_dp_aux *aux = &dig_port->dp.aux; in intel_dp_hdcp2_write_msg()
455 return -EINVAL; in intel_dp_hdcp2_write_msg()
457 offset = hdcp2_msg_data->offset; in intel_dp_hdcp2_write_msg()
459 /* No msg_id in DP HDCP2.2 msgs */ in intel_dp_hdcp2_write_msg()
460 bytes_to_write = size - 1; in intel_dp_hdcp2_write_msg()
472 bytes_to_write -= ret; in intel_dp_hdcp2_write_msg()
481 ssize_t get_receiver_id_list_rx_info(struct intel_connector *connector, in get_receiver_id_list_rx_info() argument
484 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in get_receiver_id_list_rx_info()
485 struct drm_dp_aux *aux = &dig_port->dp.aux; in get_receiver_id_list_rx_info()
493 return ret >= 0 ? -EIO : ret; in get_receiver_id_list_rx_info()
505 int intel_dp_hdcp2_read_msg(struct intel_connector *connector, in intel_dp_hdcp2_read_msg() argument
508 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_hdcp2_read_msg()
509 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); in intel_dp_hdcp2_read_msg()
510 struct drm_dp_aux *aux = &dig_port->dp.aux; in intel_dp_hdcp2_read_msg()
511 struct intel_dp *dp = &dig_port->dp; in intel_dp_hdcp2_read_msg() local
512 struct intel_hdcp *hdcp = &dp->attached_connector->hdcp; in intel_dp_hdcp2_read_msg()
523 return -EINVAL; in intel_dp_hdcp2_read_msg()
524 offset = hdcp2_msg_data->offset; in intel_dp_hdcp2_read_msg()
526 ret = intel_dp_hdcp2_wait_for_msg(connector, hdcp2_msg_data); in intel_dp_hdcp2_read_msg()
530 hdcp->cp_irq_count_cached = atomic_read(&hdcp->cp_irq_count); in intel_dp_hdcp2_read_msg()
532 /* DP adaptation msgs has no msg_id */ in intel_dp_hdcp2_read_msg()
536 ret = get_receiver_id_list_rx_info(connector, &dev_cnt, byte); in intel_dp_hdcp2_read_msg()
541 size = sizeof(struct hdcp2_rep_send_receiverid_list) - in intel_dp_hdcp2_read_msg()
542 HDCP_2_2_RXINFO_LEN - HDCP_2_2_RECEIVER_IDS_MAX_LEN + in intel_dp_hdcp2_read_msg()
547 bytes_to_recv = size - 1; in intel_dp_hdcp2_read_msg()
554 if (bytes_to_recv == size - 1 && hdcp2_msg_data->msg_read_timeout > 0) { in intel_dp_hdcp2_read_msg()
556 hdcp2_msg_data->msg_read_timeout); in intel_dp_hdcp2_read_msg()
562 drm_dbg_kms(&i915->drm, "msg_id %d, ret %zd\n", in intel_dp_hdcp2_read_msg()
567 bytes_to_recv -= ret; in intel_dp_hdcp2_read_msg()
572 if (hdcp2_msg_data->msg_read_timeout > 0) { in intel_dp_hdcp2_read_msg()
575 drm_dbg_kms(&i915->drm, "msg_id %d, entire msg read timeout(mSec): %d\n", in intel_dp_hdcp2_read_msg()
576 msg_id, hdcp2_msg_data->msg_read_timeout); in intel_dp_hdcp2_read_msg()
577 return -ETIMEDOUT; in intel_dp_hdcp2_read_msg()
588 int intel_dp_hdcp2_config_stream_type(struct intel_connector *connector, in intel_dp_hdcp2_config_stream_type() argument
598 * Errata for DP: As Stream type is used for encryption, Receiver in intel_dp_hdcp2_config_stream_type()
607 ret = intel_dp_hdcp2_write_msg(connector, &stream_type_msg, in intel_dp_hdcp2_config_stream_type()
616 struct intel_connector *connector) in intel_dp_hdcp2_check_link() argument
621 ret = intel_dp_hdcp2_read_rx_status(connector, in intel_dp_hdcp2_check_link()
637 int intel_dp_hdcp2_capable(struct intel_connector *connector, in intel_dp_hdcp2_capable() argument
640 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_hdcp2_capable()
641 struct drm_dp_aux *aux = &dig_port->dp.aux; in intel_dp_hdcp2_capable()
650 return ret >= 0 ? -EIO : ret; in intel_dp_hdcp2_capable()
680 intel_dp_mst_toggle_hdcp_stream_select(struct intel_connector *connector, in intel_dp_mst_toggle_hdcp_stream_select() argument
683 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_mst_toggle_hdcp_stream_select()
684 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_mst_toggle_hdcp_stream_select()
685 struct intel_hdcp *hdcp = &connector->hdcp; in intel_dp_mst_toggle_hdcp_stream_select()
688 ret = intel_ddi_toggle_hdcp_bits(&dig_port->base, in intel_dp_mst_toggle_hdcp_stream_select()
689 hdcp->stream_transcoder, enable, in intel_dp_mst_toggle_hdcp_stream_select()
692 drm_err(&i915->drm, "%s HDCP stream select failed (%d)\n", in intel_dp_mst_toggle_hdcp_stream_select()
698 intel_dp_mst_hdcp_stream_encryption(struct intel_connector *connector, in intel_dp_mst_hdcp_stream_encryption() argument
701 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_mst_hdcp_stream_encryption()
702 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_mst_hdcp_stream_encryption()
703 struct intel_hdcp *hdcp = &connector->hdcp; in intel_dp_mst_hdcp_stream_encryption()
704 enum port port = dig_port->base.port; in intel_dp_mst_hdcp_stream_encryption()
705 enum transcoder cpu_transcoder = hdcp->stream_transcoder; in intel_dp_mst_hdcp_stream_encryption()
709 ret = intel_dp_mst_toggle_hdcp_stream_select(connector, enable); in intel_dp_mst_hdcp_stream_encryption()
715 return -EINVAL; in intel_dp_mst_hdcp_stream_encryption()
723 drm_err(&i915->drm, "Timed out waiting for transcoder: %s stream encryption %s\n", in intel_dp_mst_hdcp_stream_encryption()
725 return -ETIMEDOUT; in intel_dp_mst_hdcp_stream_encryption()
732 intel_dp_mst_hdcp2_stream_encryption(struct intel_connector *connector, in intel_dp_mst_hdcp2_stream_encryption() argument
735 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_dp_mst_hdcp2_stream_encryption()
736 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_dp_mst_hdcp2_stream_encryption()
737 struct hdcp_port_data *data = &dig_port->hdcp_port_data; in intel_dp_mst_hdcp2_stream_encryption()
738 struct intel_hdcp *hdcp = &connector->hdcp; in intel_dp_mst_hdcp2_stream_encryption()
739 enum transcoder cpu_transcoder = hdcp->stream_transcoder; in intel_dp_mst_hdcp2_stream_encryption()
741 enum port port = dig_port->base.port; in intel_dp_mst_hdcp2_stream_encryption()
744 drm_WARN_ON(&i915->drm, enable && in intel_dp_mst_hdcp2_stream_encryption()
746 & AUTH_STREAM_TYPE) != data->streams[0].stream_type); in intel_dp_mst_hdcp2_stream_encryption()
748 ret = intel_dp_mst_toggle_hdcp_stream_select(connector, enable); in intel_dp_mst_hdcp2_stream_encryption()
758 drm_err(&i915->drm, "Timed out waiting for transcoder: %s stream encryption %s\n", in intel_dp_mst_hdcp2_stream_encryption()
760 return -ETIMEDOUT; in intel_dp_mst_hdcp2_stream_encryption()
768 struct intel_connector *connector) in intel_dp_mst_hdcp2_check_link() argument
770 struct intel_hdcp *hdcp = &connector->hdcp; in intel_dp_mst_hdcp2_check_link()
774 * We do need to do the Link Check only for the connector involved with in intel_dp_mst_hdcp2_check_link()
776 * We can re-use the hdcp->is_repeater flag to know that the connector in intel_dp_mst_hdcp2_check_link()
779 if (hdcp->is_repeater) { in intel_dp_mst_hdcp2_check_link()
780 ret = intel_dp_hdcp2_check_link(dig_port, connector); in intel_dp_mst_hdcp2_check_link()
813 struct drm_device *dev = intel_connector->base.dev; in intel_dp_hdcp_init()
815 struct intel_encoder *intel_encoder = &dig_port->base; in intel_dp_hdcp_init()
816 enum port port = intel_encoder->port; in intel_dp_hdcp_init()
817 struct intel_dp *intel_dp = &dig_port->dp; in intel_dp_hdcp_init()
822 if (intel_connector->mst_port) in intel_dp_hdcp_init()