[PATCH 1/6] drm/i915/hdcp: Move to direct reads for HDCP

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Tue Jan 30 08:49:52 UTC 2024


LGTM.

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>


On 1/27/2024 12:46 PM, Suraj Kandpal wrote:
> Even for MST scenarios we need to do direct reads only on the
> immediate downstream device the rest of the authentication is taken
> care by that device. Remote reads will only be used to check
> capability of the monitors in MST topology.
>
> --v2
> -Add fixes tag [Ankit]
> -Derive aux where needed rather than through a function [Ankit]
>
> Fixes: ae4f902bb344 ("drm/i915/hdcp: Send the correct aux for DPMST HDCP scenario")
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 31 ++++++--------------
>   1 file changed, 9 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> index 3a595cd433d4..defc90936317 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c
> @@ -330,23 +330,13 @@ static const struct hdcp2_dp_msg_data hdcp2_dp_msg_data[] = {
>   	  0, 0 },
>   };
>   
> -static struct drm_dp_aux *
> -intel_dp_hdcp_get_aux(struct intel_connector *connector)
> -{
> -	struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
> -
> -	if (intel_encoder_is_mst(connector->encoder))
> -		return &connector->port->aux;
> -	else
> -		return &dig_port->dp.aux;
> -}
> -
>   static int
>   intel_dp_hdcp2_read_rx_status(struct intel_connector *connector,
>   			      u8 *rx_status)
>   {
>   	struct drm_i915_private *i915 = to_i915(connector->base.dev);
> -	struct drm_dp_aux *aux = intel_dp_hdcp_get_aux(connector);
> +	struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
> +	struct drm_dp_aux *aux = &dig_port->dp.aux;
>   	ssize_t ret;
>   
>   	ret = drm_dp_dpcd_read(aux,
> @@ -454,8 +444,9 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
>   	unsigned int offset;
>   	u8 *byte = buf;
>   	ssize_t ret, bytes_to_write, len;
> +	struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
> +	struct drm_dp_aux *aux = &dig_port->dp.aux;
>   	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)
> @@ -463,8 +454,6 @@ int intel_dp_hdcp2_write_msg(struct intel_connector *connector,
>   
>   	offset = hdcp2_msg_data->offset;
>   
> -	aux = intel_dp_hdcp_get_aux(connector);
> -
>   	/* No msg_id in DP HDCP2.2 msgs */
>   	bytes_to_write = size - 1;
>   	byte++;
> @@ -490,7 +479,8 @@ static
>   ssize_t get_receiver_id_list_rx_info(struct intel_connector *connector,
>   				     u32 *dev_cnt, u8 *byte)
>   {
> -	struct drm_dp_aux *aux = intel_dp_hdcp_get_aux(connector);
> +	struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
> +	struct drm_dp_aux *aux = &dig_port->dp.aux;
>   	ssize_t ret;
>   	u8 *rx_info = byte;
>   
> @@ -516,7 +506,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_hdcp *hdcp = &connector->hdcp;
> -	struct drm_dp_aux *aux;
> +	struct drm_dp_aux *aux = &dig_port->dp.aux;
>   	unsigned int offset;
>   	u8 *byte = buf;
>   	ssize_t ret, bytes_to_recv, len;
> @@ -530,8 +520,6 @@ int intel_dp_hdcp2_read_msg(struct intel_connector *connector,
>   		return -EINVAL;
>   	offset = hdcp2_msg_data->offset;
>   
> -	aux = intel_dp_hdcp_get_aux(connector);
> -
>   	ret = intel_dp_hdcp2_wait_for_msg(connector, hdcp2_msg_data);
>   	if (ret < 0)
>   		return ret;
> @@ -651,12 +639,11 @@ static
>   int intel_dp_hdcp2_capable(struct intel_connector *connector,
>   			   bool *capable)
>   {
> -	struct drm_dp_aux *aux;
> +	struct intel_digital_port *dig_port = intel_attached_dig_port(connector);
> +	struct drm_dp_aux *aux = &dig_port->dp.aux;
>   	u8 rx_caps[3];
>   	int ret;
>   
> -	aux = intel_dp_hdcp_get_aux(connector);
> -
>   	*capable = false;
>   	ret = drm_dp_dpcd_read(aux,
>   			       DP_HDCP_2_2_REG_RX_CAPS_OFFSET,


More information about the Intel-gfx mailing list