[Intel-gfx] [PATCH v2 2/4] drm/i915/hdcp: Propagate aux info in DP HDCP functions

Murthy, Arun R arun.r.murthy at intel.com
Thu Aug 24 10:07:39 UTC 2023


Reviewed-by: Arun R Murthy <arun.r.murthy at intel.com>

Thanks and Regards,
Arun R Murthy
-------------------
________________________________
From: Kandpal, Suraj <suraj.kandpal at intel.com>
Sent: Wednesday, August 23, 2023 11:28 AM
To: intel-gfx at lists.freedesktop.org <intel-gfx at lists.freedesktop.org>
Cc: Nautiyal, Ankit K <ankit.k.nautiyal at intel.com>; uma.shakar at intel.com <uma.shakar at intel.com>; Murthy, Arun R <arun.r.murthy at intel.com>; Kandpal, Suraj <suraj.kandpal at intel.com>
Subject: [PATCH v2 2/4] 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 at intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 39 +++++++++++---------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
index 6cd42363837a..59ef77476cb9 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
@@ -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;

--
2.25.1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20230824/0501d860/attachment-0001.htm>


More information about the Intel-gfx mailing list