drm/i915/hdcp: Propagate aux info in DP HDCP functions
We were propagating dig_port info to dp hdcp2 specific functions. Let us clean that up and send intel_connector in the following functions: intel_dp_hdcp2_wait_for_msg, get_receiver_id_list_rx_info, intel_dp_hdcp2_read_rx_status. This optimises mst scenarios where aux ends up being remote and not stored in dig_port and dig_port can always be derived from intel_connector if needed. --v2 -Fix Typo [Arun] -Dont pass drm_dp core structures [Arun] -Fix commit message styling [Arun] Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com> Signed-off-by: Uma Shankar <uma.shankar@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230828063850.604048-1-suraj.kandpal@intel.com
This commit is contained in:
parent
51152acfdc
commit
524240b231
1 changed files with 22 additions and 17 deletions
|
@ -331,10 +331,11 @@ static const struct hdcp2_dp_msg_data hdcp2_dp_msg_data[] = {
|
|||
};
|
||||
|
||||
static int
|
||||
intel_dp_hdcp2_read_rx_status(struct intel_digital_port *dig_port,
|
||||
intel_dp_hdcp2_read_rx_status(struct intel_connector *connector,
|
||||
u8 *rx_status)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
|
||||
struct drm_i915_private *i915 = to_i915(connector->base.dev);
|
||||
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
|
||||
ssize_t ret;
|
||||
|
||||
ret = drm_dp_dpcd_read(&dig_port->dp.aux,
|
||||
|
@ -350,14 +351,14 @@ intel_dp_hdcp2_read_rx_status(struct intel_digital_port *dig_port,
|
|||
}
|
||||
|
||||
static
|
||||
int hdcp2_detect_msg_availability(struct intel_digital_port *dig_port,
|
||||
int hdcp2_detect_msg_availability(struct intel_connector *connector,
|
||||
u8 msg_id, bool *msg_ready)
|
||||
{
|
||||
u8 rx_status;
|
||||
int ret;
|
||||
|
||||
*msg_ready = false;
|
||||
ret = intel_dp_hdcp2_read_rx_status(dig_port, &rx_status);
|
||||
ret = intel_dp_hdcp2_read_rx_status(connector, &rx_status);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -383,12 +384,11 @@ int hdcp2_detect_msg_availability(struct intel_digital_port *dig_port,
|
|||
}
|
||||
|
||||
static ssize_t
|
||||
intel_dp_hdcp2_wait_for_msg(struct intel_digital_port *dig_port,
|
||||
intel_dp_hdcp2_wait_for_msg(struct intel_connector *connector,
|
||||
const struct hdcp2_dp_msg_data *hdcp2_msg_data)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
|
||||
struct intel_dp *dp = &dig_port->dp;
|
||||
struct intel_hdcp *hdcp = &dp->attached_connector->hdcp;
|
||||
struct drm_i915_private *i915 = to_i915(connector->base.dev);
|
||||
struct intel_hdcp *hdcp = &connector->hdcp;
|
||||
u8 msg_id = hdcp2_msg_data->msg_id;
|
||||
int ret, timeout;
|
||||
bool msg_ready = false;
|
||||
|
@ -411,8 +411,8 @@ intel_dp_hdcp2_wait_for_msg(struct intel_digital_port *dig_port,
|
|||
* the timeout at wait for CP_IRQ.
|
||||
*/
|
||||
intel_dp_hdcp_wait_for_cp_irq(hdcp, timeout);
|
||||
ret = hdcp2_detect_msg_availability(dig_port,
|
||||
msg_id, &msg_ready);
|
||||
ret = hdcp2_detect_msg_availability(connector, msg_id,
|
||||
&msg_ready);
|
||||
if (!msg_ready)
|
||||
ret = -ETIMEDOUT;
|
||||
}
|
||||
|
@ -445,6 +445,7 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
|
|||
u8 *byte = buf;
|
||||
ssize_t ret, bytes_to_write, len;
|
||||
const struct hdcp2_dp_msg_data *hdcp2_msg_data;
|
||||
struct drm_dp_aux *aux;
|
||||
|
||||
hdcp2_msg_data = get_hdcp2_dp_msg_data(*byte);
|
||||
if (!hdcp2_msg_data)
|
||||
|
@ -452,6 +453,8 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
|
|||
|
||||
offset = hdcp2_msg_data->offset;
|
||||
|
||||
aux = &dig_port->dp.aux;
|
||||
|
||||
/* No msg_id in DP HDCP2.2 msgs */
|
||||
bytes_to_write = size - 1;
|
||||
byte++;
|
||||
|
@ -460,7 +463,7 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
|
|||
len = bytes_to_write > DP_AUX_MAX_PAYLOAD_BYTES ?
|
||||
DP_AUX_MAX_PAYLOAD_BYTES : bytes_to_write;
|
||||
|
||||
ret = drm_dp_dpcd_write(&dig_port->dp.aux,
|
||||
ret = drm_dp_dpcd_write(aux,
|
||||
offset, (void *)byte, len);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
@ -474,8 +477,10 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
|
|||
}
|
||||
|
||||
static
|
||||
ssize_t get_receiver_id_list_rx_info(struct intel_digital_port *dig_port, u32 *dev_cnt, u8 *byte)
|
||||
ssize_t get_receiver_id_list_rx_info(struct intel_connector *connector,
|
||||
u32 *dev_cnt, u8 *byte)
|
||||
{
|
||||
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
|
||||
ssize_t ret;
|
||||
u8 *rx_info = byte;
|
||||
|
||||
|
@ -500,8 +505,7 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
|
|||
{
|
||||
struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
|
||||
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
|
||||
struct intel_dp *dp = &dig_port->dp;
|
||||
struct intel_hdcp *hdcp = &dp->attached_connector->hdcp;
|
||||
struct intel_hdcp *hdcp = &connector->hdcp;
|
||||
unsigned int offset;
|
||||
u8 *byte = buf;
|
||||
ssize_t ret, bytes_to_recv, len;
|
||||
|
@ -515,7 +519,7 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
|
|||
return -EINVAL;
|
||||
offset = hdcp2_msg_data->offset;
|
||||
|
||||
ret = intel_dp_hdcp2_wait_for_msg(dig_port, hdcp2_msg_data);
|
||||
ret = intel_dp_hdcp2_wait_for_msg(connector, hdcp2_msg_data);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -525,7 +529,7 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
|
|||
byte++;
|
||||
|
||||
if (msg_id == HDCP_2_2_REP_SEND_RECVID_LIST) {
|
||||
ret = get_receiver_id_list_rx_info(dig_port, &dev_cnt, byte);
|
||||
ret = get_receiver_id_list_rx_info(connector, &dev_cnt, byte);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -609,7 +613,8 @@ int intel_dp_hdcp2_check_link(struct intel_digital_port *dig_port,
|
|||
u8 rx_status;
|
||||
int ret;
|
||||
|
||||
ret = intel_dp_hdcp2_read_rx_status(dig_port, &rx_status);
|
||||
ret = intel_dp_hdcp2_read_rx_status(connector,
|
||||
&rx_status);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue