Commit 51152acf authored by Suraj Kandpal's avatar Suraj Kandpal Committed by Uma Shankar

drm/i915/hdcp: Use intel_connector argument in intel_hdcp_shim

Update intel_hdcp_shim funcs specifically read_2_2_message,
write_2_2_message and config_stream_type to use intel_connector
argument instead of intel_digital_port as this will help in getting
correct aux later for dp mst scenarios also already hdcp funcs
derive digital_port from connector and then many funcs again get back
the connector from dig_port which doesn't seem right.
Connector specific hdcp functions can derive dig_port on need basis.
Signed-off-by: default avatarSuraj Kandpal <suraj.kandpal@intel.com>
Reviewed-by: default avatarArun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: default avatarUma Shankar <uma.shankar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230828063401.600414-2-suraj.kandpal@intel.com
parent 9af09dfc
...@@ -504,11 +504,11 @@ struct intel_hdcp_shim { ...@@ -504,11 +504,11 @@ struct intel_hdcp_shim {
bool *capable); bool *capable);
/* Write HDCP2.2 messages */ /* Write HDCP2.2 messages */
int (*write_2_2_msg)(struct intel_digital_port *dig_port, int (*write_2_2_msg)(struct intel_connector *connector,
void *buf, size_t size); void *buf, size_t size);
/* Read HDCP2.2 messages */ /* Read HDCP2.2 messages */
int (*read_2_2_msg)(struct intel_digital_port *dig_port, int (*read_2_2_msg)(struct intel_connector *connector,
u8 msg_id, void *buf, size_t size); u8 msg_id, void *buf, size_t size);
/* /*
...@@ -516,7 +516,7 @@ struct intel_hdcp_shim { ...@@ -516,7 +516,7 @@ struct intel_hdcp_shim {
* type to Receivers. In DP HDCP2.2 Stream type is one of the input to * type to Receivers. In DP HDCP2.2 Stream type is one of the input to
* the HDCP2.2 Cipher for En/De-Cryption. Not applicable for HDMI. * the HDCP2.2 Cipher for En/De-Cryption. Not applicable for HDMI.
*/ */
int (*config_stream_type)(struct intel_digital_port *dig_port, int (*config_stream_type)(struct intel_connector *connector,
bool is_repeater, u8 type); bool is_repeater, u8 type);
/* Enable/Disable HDCP 2.2 stream encryption on DP MST Transport Link */ /* Enable/Disable HDCP 2.2 stream encryption on DP MST Transport Link */
......
...@@ -437,9 +437,10 @@ static const struct hdcp2_dp_msg_data *get_hdcp2_dp_msg_data(u8 msg_id) ...@@ -437,9 +437,10 @@ static const struct hdcp2_dp_msg_data *get_hdcp2_dp_msg_data(u8 msg_id)
} }
static static
int intel_dp_hdcp2_write_msg(struct intel_digital_port *dig_port, int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
void *buf, size_t size) void *buf, size_t size)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
unsigned int offset; unsigned int offset;
u8 *byte = buf; u8 *byte = buf;
ssize_t ret, bytes_to_write, len; ssize_t ret, bytes_to_write, len;
...@@ -494,9 +495,10 @@ ssize_t get_receiver_id_list_rx_info(struct intel_digital_port *dig_port, u32 *d ...@@ -494,9 +495,10 @@ ssize_t get_receiver_id_list_rx_info(struct intel_digital_port *dig_port, u32 *d
} }
static static
int intel_dp_hdcp2_read_msg(struct intel_digital_port *dig_port, int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
u8 msg_id, void *buf, size_t size) u8 msg_id, void *buf, size_t size)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_dp *dp = &dig_port->dp; struct intel_dp *dp = &dig_port->dp;
struct intel_hdcp *hdcp = &dp->attached_connector->hdcp; struct intel_hdcp *hdcp = &dp->attached_connector->hdcp;
...@@ -574,7 +576,7 @@ int intel_dp_hdcp2_read_msg(struct intel_digital_port *dig_port, ...@@ -574,7 +576,7 @@ int intel_dp_hdcp2_read_msg(struct intel_digital_port *dig_port,
} }
static static
int intel_dp_hdcp2_config_stream_type(struct intel_digital_port *dig_port, int intel_dp_hdcp2_config_stream_type(struct intel_connector *connector,
bool is_repeater, u8 content_type) bool is_repeater, u8 content_type)
{ {
int ret; int ret;
...@@ -593,7 +595,7 @@ int intel_dp_hdcp2_config_stream_type(struct intel_digital_port *dig_port, ...@@ -593,7 +595,7 @@ int intel_dp_hdcp2_config_stream_type(struct intel_digital_port *dig_port,
stream_type_msg.msg_id = HDCP_2_2_ERRATA_DP_STREAM_TYPE; stream_type_msg.msg_id = HDCP_2_2_ERRATA_DP_STREAM_TYPE;
stream_type_msg.stream_type = content_type; stream_type_msg.stream_type = content_type;
ret = intel_dp_hdcp2_write_msg(dig_port, &stream_type_msg, ret = intel_dp_hdcp2_write_msg(connector, &stream_type_msg,
sizeof(stream_type_msg)); sizeof(stream_type_msg));
return ret < 0 ? ret : 0; return ret < 0 ? ret : 0;
......
...@@ -1415,7 +1415,6 @@ static int hdcp2_deauthenticate_port(struct intel_connector *connector) ...@@ -1415,7 +1415,6 @@ static int hdcp2_deauthenticate_port(struct intel_connector *connector)
/* Authentication flow starts from here */ /* Authentication flow starts from here */
static int hdcp2_authentication_key_exchange(struct intel_connector *connector) static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct drm_i915_private *i915 = to_i915(connector->base.dev);
struct intel_hdcp *hdcp = &connector->hdcp; struct intel_hdcp *hdcp = &connector->hdcp;
union { union {
...@@ -1437,12 +1436,12 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector) ...@@ -1437,12 +1436,12 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = shim->write_2_2_msg(dig_port, &msgs.ake_init, ret = shim->write_2_2_msg(connector, &msgs.ake_init,
sizeof(msgs.ake_init)); sizeof(msgs.ake_init));
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = shim->read_2_2_msg(dig_port, HDCP_2_2_AKE_SEND_CERT, ret = shim->read_2_2_msg(connector, HDCP_2_2_AKE_SEND_CERT,
&msgs.send_cert, sizeof(msgs.send_cert)); &msgs.send_cert, sizeof(msgs.send_cert));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1471,11 +1470,11 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector) ...@@ -1471,11 +1470,11 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = shim->write_2_2_msg(dig_port, &msgs.no_stored_km, size); ret = shim->write_2_2_msg(connector, &msgs.no_stored_km, size);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = shim->read_2_2_msg(dig_port, HDCP_2_2_AKE_SEND_HPRIME, ret = shim->read_2_2_msg(connector, HDCP_2_2_AKE_SEND_HPRIME,
&msgs.send_hprime, sizeof(msgs.send_hprime)); &msgs.send_hprime, sizeof(msgs.send_hprime));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1486,7 +1485,7 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector) ...@@ -1486,7 +1485,7 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
if (!hdcp->is_paired) { if (!hdcp->is_paired) {
/* Pairing is required */ /* Pairing is required */
ret = shim->read_2_2_msg(dig_port, ret = shim->read_2_2_msg(connector,
HDCP_2_2_AKE_SEND_PAIRING_INFO, HDCP_2_2_AKE_SEND_PAIRING_INFO,
&msgs.pairing_info, &msgs.pairing_info,
sizeof(msgs.pairing_info)); sizeof(msgs.pairing_info));
...@@ -1504,7 +1503,6 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector) ...@@ -1504,7 +1503,6 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
static int hdcp2_locality_check(struct intel_connector *connector) static int hdcp2_locality_check(struct intel_connector *connector)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct intel_hdcp *hdcp = &connector->hdcp; struct intel_hdcp *hdcp = &connector->hdcp;
union { union {
struct hdcp2_lc_init lc_init; struct hdcp2_lc_init lc_init;
...@@ -1518,12 +1516,12 @@ static int hdcp2_locality_check(struct intel_connector *connector) ...@@ -1518,12 +1516,12 @@ static int hdcp2_locality_check(struct intel_connector *connector)
if (ret < 0) if (ret < 0)
continue; continue;
ret = shim->write_2_2_msg(dig_port, &msgs.lc_init, ret = shim->write_2_2_msg(connector, &msgs.lc_init,
sizeof(msgs.lc_init)); sizeof(msgs.lc_init));
if (ret < 0) if (ret < 0)
continue; continue;
ret = shim->read_2_2_msg(dig_port, ret = shim->read_2_2_msg(connector,
HDCP_2_2_LC_SEND_LPRIME, HDCP_2_2_LC_SEND_LPRIME,
&msgs.send_lprime, &msgs.send_lprime,
sizeof(msgs.send_lprime)); sizeof(msgs.send_lprime));
...@@ -1540,7 +1538,6 @@ static int hdcp2_locality_check(struct intel_connector *connector) ...@@ -1540,7 +1538,6 @@ static int hdcp2_locality_check(struct intel_connector *connector)
static int hdcp2_session_key_exchange(struct intel_connector *connector) static int hdcp2_session_key_exchange(struct intel_connector *connector)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct intel_hdcp *hdcp = &connector->hdcp; struct intel_hdcp *hdcp = &connector->hdcp;
struct hdcp2_ske_send_eks send_eks; struct hdcp2_ske_send_eks send_eks;
int ret; int ret;
...@@ -1549,7 +1546,7 @@ static int hdcp2_session_key_exchange(struct intel_connector *connector) ...@@ -1549,7 +1546,7 @@ static int hdcp2_session_key_exchange(struct intel_connector *connector)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = hdcp->shim->write_2_2_msg(dig_port, &send_eks, ret = hdcp->shim->write_2_2_msg(connector, &send_eks,
sizeof(send_eks)); sizeof(send_eks));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1587,12 +1584,12 @@ int _hdcp2_propagate_stream_management_info(struct intel_connector *connector) ...@@ -1587,12 +1584,12 @@ int _hdcp2_propagate_stream_management_info(struct intel_connector *connector)
streams_size_delta = (HDCP_2_2_MAX_CONTENT_STREAMS_CNT - data->k) * streams_size_delta = (HDCP_2_2_MAX_CONTENT_STREAMS_CNT - data->k) *
sizeof(struct hdcp2_streamid_type); sizeof(struct hdcp2_streamid_type);
/* Send it to Repeater */ /* Send it to Repeater */
ret = shim->write_2_2_msg(dig_port, &msgs.stream_manage, ret = shim->write_2_2_msg(connector, &msgs.stream_manage,
sizeof(msgs.stream_manage) - streams_size_delta); sizeof(msgs.stream_manage) - streams_size_delta);
if (ret < 0) if (ret < 0)
goto out; goto out;
ret = shim->read_2_2_msg(dig_port, HDCP_2_2_REP_STREAM_READY, ret = shim->read_2_2_msg(connector, HDCP_2_2_REP_STREAM_READY,
&msgs.stream_ready, sizeof(msgs.stream_ready)); &msgs.stream_ready, sizeof(msgs.stream_ready));
if (ret < 0) if (ret < 0)
goto out; goto out;
...@@ -1622,7 +1619,7 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector) ...@@ -1622,7 +1619,7 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector)
u8 *rx_info; u8 *rx_info;
int ret; int ret;
ret = shim->read_2_2_msg(dig_port, HDCP_2_2_REP_SEND_RECVID_LIST, ret = shim->read_2_2_msg(connector, HDCP_2_2_REP_SEND_RECVID_LIST,
&msgs.recvid_list, sizeof(msgs.recvid_list)); &msgs.recvid_list, sizeof(msgs.recvid_list));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1675,7 +1672,7 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector) ...@@ -1675,7 +1672,7 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector)
return ret; return ret;
hdcp->seq_num_v = seq_num_v; hdcp->seq_num_v = seq_num_v;
ret = shim->write_2_2_msg(dig_port, &msgs.rep_ack, ret = shim->write_2_2_msg(connector, &msgs.rep_ack,
sizeof(msgs.rep_ack)); sizeof(msgs.rep_ack));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1685,7 +1682,6 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector) ...@@ -1685,7 +1682,6 @@ int hdcp2_authenticate_repeater_topology(struct intel_connector *connector)
static int hdcp2_authenticate_sink(struct intel_connector *connector) static int hdcp2_authenticate_sink(struct intel_connector *connector)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct drm_i915_private *i915 = to_i915(connector->base.dev);
struct intel_hdcp *hdcp = &connector->hdcp; struct intel_hdcp *hdcp = &connector->hdcp;
const struct intel_hdcp_shim *shim = hdcp->shim; const struct intel_hdcp_shim *shim = hdcp->shim;
...@@ -1711,7 +1707,7 @@ static int hdcp2_authenticate_sink(struct intel_connector *connector) ...@@ -1711,7 +1707,7 @@ static int hdcp2_authenticate_sink(struct intel_connector *connector)
} }
if (shim->config_stream_type) { if (shim->config_stream_type) {
ret = shim->config_stream_type(dig_port, ret = shim->config_stream_type(connector,
hdcp->is_repeater, hdcp->is_repeater,
hdcp->content_type); hdcp->content_type);
if (ret < 0) if (ret < 0)
......
...@@ -1665,9 +1665,10 @@ intel_hdmi_hdcp2_wait_for_msg(struct intel_digital_port *dig_port, ...@@ -1665,9 +1665,10 @@ intel_hdmi_hdcp2_wait_for_msg(struct intel_digital_port *dig_port,
} }
static static
int intel_hdmi_hdcp2_write_msg(struct intel_digital_port *dig_port, int intel_hdmi_hdcp2_write_msg(struct intel_connector *connector,
void *buf, size_t size) void *buf, size_t size)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
unsigned int offset; unsigned int offset;
offset = HDCP_2_2_HDMI_REG_WR_MSG_OFFSET; offset = HDCP_2_2_HDMI_REG_WR_MSG_OFFSET;
...@@ -1675,9 +1676,10 @@ int intel_hdmi_hdcp2_write_msg(struct intel_digital_port *dig_port, ...@@ -1675,9 +1676,10 @@ int intel_hdmi_hdcp2_write_msg(struct intel_digital_port *dig_port,
} }
static static
int intel_hdmi_hdcp2_read_msg(struct intel_digital_port *dig_port, int intel_hdmi_hdcp2_read_msg(struct intel_connector *connector,
u8 msg_id, void *buf, size_t size) u8 msg_id, void *buf, size_t size)
{ {
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi; struct intel_hdmi *hdmi = &dig_port->hdmi;
struct intel_hdcp *hdcp = &hdmi->attached_connector->hdcp; struct intel_hdcp *hdcp = &hdmi->attached_connector->hdcp;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment