[Intel-gfx] [PATCH 2/4] drm/i915/hdcp: Propagate aux info in DP HDCP functions
Murthy, Arun R
arun.r.murthy at intel.com
Tue Aug 22 03:01:51 UTC 2023
> -----Original Message-----
> From: Kandpal, Suraj <suraj.kandpal at intel.com>
> Sent: Thursday, August 10, 2023 1:18 PM
> To: intel-gfx at lists.freedesktop.org
> Cc: Nautiyal, Ankit K <ankit.k.nautiyal 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 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 drm_dp_aux instead n functions:
Typo.
Its not a good convention to pass the drm_dp core struct in i915 functions.
We have been using i915 wrapper functions for this. Feel its better to
continue the same convention. On the other hand, intel_dp can help in
getting the drm_dp_aux.
> 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.
Can this sentence be broken?
Thanks and Regards,
Arun R Murthy
--------------------
>
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 43 ++++++++++++--------
> 1 file changed, 25 insertions(+), 18 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..5304aa73b23f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> @@ -331,13 +331,13 @@ 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 drm_i915_private *i915,
> + struct drm_dp_aux *aux,
> u8 *rx_status)
> {
> - struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> ssize_t ret;
>
> - ret = drm_dp_dpcd_read(&dig_port->dp.aux,
> + ret = drm_dp_dpcd_read(aux,
> DP_HDCP_2_2_REG_RXSTATUS_OFFSET,
> rx_status,
> HDCP_2_2_DP_RXSTATUS_LEN);
> if (ret != HDCP_2_2_DP_RXSTATUS_LEN) { @@ -350,14 +350,15 @@
> 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 drm_i915_private *i915,
> + struct drm_dp_aux *aux,
> 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(i915, aux, &rx_status);
> if (ret < 0)
> return ret;
>
> @@ -383,12 +384,10 @@ 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 drm_i915_private *i915, struct
> drm_dp_aux *aux,
> + struct intel_hdcp *hdcp,
> 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;
> u8 msg_id = hdcp2_msg_data->msg_id;
> int ret, timeout;
> bool msg_ready = false;
> @@ -411,7 +410,7 @@ 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,
> + ret = hdcp2_detect_msg_availability(i915, aux,
> msg_id, &msg_ready);
> if (!msg_ready)
> ret = -ETIMEDOUT;
> @@ -445,6 +444,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 +452,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 +462,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,12 +476,12 @@ 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 drm_dp_aux *aux, u32
> +*dev_cnt, u8 *byte)
> {
> ssize_t ret;
> u8 *rx_info = byte;
>
> - ret = drm_dp_dpcd_read(&dig_port->dp.aux,
> + ret = drm_dp_dpcd_read(aux,
> DP_HDCP_2_2_REG_RXINFO_OFFSET,
> (void *)rx_info, HDCP_2_2_RXINFO_LEN);
> if (ret != HDCP_2_2_RXINFO_LEN)
> @@ -501,7 +503,8 @@ 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;
> + struct drm_dp_aux *aux;
> unsigned int offset;
> u8 *byte = buf;
> ssize_t ret, bytes_to_recv, len;
> @@ -515,7 +518,9 @@ 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);
> + aux = &dp->aux;
> +
> + ret = intel_dp_hdcp2_wait_for_msg(i915, aux, hdcp,
> hdcp2_msg_data);
> if (ret < 0)
> return ret;
>
> @@ -525,7 +530,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(aux, &dev_cnt, byte);
> if (ret < 0)
> return ret;
>
> @@ -547,7 +552,7 @@ int intel_dp_hdcp2_read_msg(struct intel_connector
> *connector,
> msg_end = ktime_add_ms(ktime_get_raw(),
> hdcp2_msg_data-
> >msg_read_timeout);
>
> - ret = drm_dp_dpcd_read(&dig_port->dp.aux, offset,
> + ret = drm_dp_dpcd_read(aux, offset,
> (void *)byte, len);
> if (ret < 0) {
> drm_dbg_kms(&i915->drm, "msg_id %d, ret %zd\n",
> @@ -606,10 +611,12 @@ static int intel_dp_hdcp2_check_link(struct
> intel_digital_port *dig_port,
> struct intel_connector *connector) {
> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
> u8 rx_status;
> int ret;
>
> - ret = intel_dp_hdcp2_read_rx_status(dig_port, &rx_status);
> + ret = intel_dp_hdcp2_read_rx_status(i915, &dig_port->dp.aux,
> + &rx_status);
> if (ret)
> return ret;
>
> --
> 2.25.1
More information about the Intel-gfx
mailing list