[PATCH 03/10] drm/i915/hdcp: split HDCP GSC message alloc/save responsibilities

Kandpal, Suraj suraj.kandpal at intel.com
Fri May 2 03:36:17 UTC 2025



> -----Original Message-----
> From: Nikula, Jani <jani.nikula at intel.com>
> Sent: Friday, April 25, 2025 1:32 AM
> To: intel-gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org
> Cc: Nikula, Jani <jani.nikula at intel.com>; Kandpal, Suraj
> <suraj.kandpal at intel.com>
> Subject: [PATCH 03/10] drm/i915/hdcp: split HDCP GSC message alloc/save
> responsibilities
> 
> Allocate and initialize the HDCP GSC message in
> intel_hdcp_gsc_hdcp2_init() as before, but store the pointer to
> display->hdcp.hdcp_message in the caller. Similarly, pass in the pointer
> to intel_hdcp_gsc_free_message().
> 
> Cc: Suraj Kandpal <suraj.kandpal at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>

LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal at intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 22 +++++++++----------
> drivers/gpu/drm/i915/display/intel_hdcp_gsc.h |  4 ++--
> .../drm/i915/display/intel_hdcp_gsc_message.c | 12 ++++++----
>  drivers/gpu/drm/xe/display/xe_hdcp_gsc.c      | 22 ++++++++-----------
>  4 files changed, 29 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> index 92a3ad2166f6..68d912dbd658 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> @@ -90,37 +90,35 @@ static int intel_hdcp_gsc_initialize_message(struct
> drm_i915_private *i915,
>  	return err;
>  }
> 
> -int intel_hdcp_gsc_hdcp2_init(struct intel_display *display)
> +struct intel_hdcp_gsc_message *intel_hdcp_gsc_hdcp2_init(struct
> +intel_display *display)
>  {
>  	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_hdcp_gsc_message *hdcp_message;
>  	int ret;
> 
>  	hdcp_message = kzalloc(sizeof(*hdcp_message), GFP_KERNEL);
> -
>  	if (!hdcp_message)
> -		return -ENOMEM;
> +		return ERR_PTR(-ENOMEM);
> 
>  	/*
>  	 * NOTE: No need to lock the comp mutex here as it is already
>  	 * going to be taken before this function called
>  	 */
> -	display->hdcp.hdcp_message = hdcp_message;
>  	ret = intel_hdcp_gsc_initialize_message(i915, hdcp_message);
> -
> -	if (ret)
> +	if (ret) {
>  		drm_err(display->drm, "Could not initialize hdcp_message\n");
> +		kfree(hdcp_message);
> +		hdcp_message = ERR_PTR(ret);
> +	}
> 
> -	return ret;
> +	return hdcp_message;
>  }
> 
> -void intel_hdcp_gsc_free_message(struct intel_display *display)
> +void intel_hdcp_gsc_free_message(struct intel_hdcp_gsc_message
> +*hdcp_message)
>  {
> -	struct intel_hdcp_gsc_message *hdcp_message =
> -					display->hdcp.hdcp_message;
> +	if (!hdcp_message)
> +		return;
> 
> -	hdcp_message->hdcp_cmd_in = NULL;
> -	hdcp_message->hdcp_cmd_out = NULL;
>  	i915_vma_unpin_and_release(&hdcp_message->vma,
> I915_VMA_RELEASE_MAP);
>  	kfree(hdcp_message);
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> index ad41e7e80095..f3362720d742 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> @@ -19,7 +19,7 @@ ssize_t intel_hdcp_gsc_msg_send(struct
> drm_i915_private *i915, u8 *msg_in,
>  				size_t msg_out_len);
>  bool intel_hdcp_gsc_check_status(struct intel_display *display);
> 
> -int intel_hdcp_gsc_hdcp2_init(struct intel_display *display); -void
> intel_hdcp_gsc_free_message(struct intel_display *display);
> +struct intel_hdcp_gsc_message *intel_hdcp_gsc_hdcp2_init(struct
> +intel_display *display); void intel_hdcp_gsc_free_message(struct
> +intel_hdcp_gsc_message *hdcp_message);
> 
>  #endif /* __INTEL_HDCP_GCS_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> index 8e2aafff71d5..11aa6772f272 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> @@ -633,8 +633,9 @@ static const struct i915_hdcp_ops gsc_hdcp_ops = {
> 
>  int intel_hdcp_gsc_init(struct intel_display *display)  {
> +	struct intel_hdcp_gsc_message *hdcp_message;
>  	struct i915_hdcp_arbiter *arbiter;
> -	int ret;
> +	int ret = 0;
> 
>  	arbiter = kzalloc(sizeof(*arbiter), GFP_KERNEL);
>  	if (!arbiter)
> @@ -642,8 +643,9 @@ int intel_hdcp_gsc_init(struct intel_display *display)
> 
>  	mutex_lock(&display->hdcp.hdcp_mutex);
> 
> -	ret = intel_hdcp_gsc_hdcp2_init(display);
> -	if (ret) {
> +	hdcp_message = intel_hdcp_gsc_hdcp2_init(display);
> +	if (IS_ERR(hdcp_message)) {
> +		ret = PTR_ERR(hdcp_message);
>  		kfree(arbiter);
>  		goto out;
>  	}
> @@ -651,6 +653,7 @@ int intel_hdcp_gsc_init(struct intel_display *display)
>  	display->hdcp.arbiter = arbiter;
>  	display->hdcp.arbiter->hdcp_dev = display->drm->dev;
>  	display->hdcp.arbiter->ops = &gsc_hdcp_ops;
> +	display->hdcp.hdcp_message = hdcp_message;
> 
>  out:
>  	mutex_unlock(&display->hdcp.hdcp_mutex);
> @@ -660,7 +663,8 @@ int intel_hdcp_gsc_init(struct intel_display *display)
> 
>  void intel_hdcp_gsc_fini(struct intel_display *display)  {
> -	intel_hdcp_gsc_free_message(display);
> +	intel_hdcp_gsc_free_message(display->hdcp.hdcp_message);
> +	display->hdcp.hdcp_message = NULL;
>  	kfree(display->hdcp.arbiter);
>  	display->hdcp.arbiter = NULL;
>  }
> diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> index 21cfecf077bf..d15565bf2f9f 100644
> --- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> +++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> @@ -99,15 +99,14 @@ static int intel_hdcp_gsc_initialize_message(struct
> intel_display *display,
>  	return ret;
>  }
> 
> -int intel_hdcp_gsc_hdcp2_init(struct intel_display *display)
> +struct intel_hdcp_gsc_message *intel_hdcp_gsc_hdcp2_init(struct
> +intel_display *display)
>  {
>  	struct intel_hdcp_gsc_message *hdcp_message;
>  	int ret;
> 
>  	hdcp_message = kzalloc(sizeof(*hdcp_message), GFP_KERNEL);
> -
>  	if (!hdcp_message)
> -		return -ENOMEM;
> +		return ERR_PTR(-ENOMEM);
> 
>  	/*
>  	 * NOTE: No need to lock the comp mutex here as it is already @@ -
> 117,22 +116,19 @@ int intel_hdcp_gsc_hdcp2_init(struct intel_display *display)
>  	if (ret) {
>  		drm_err(display->drm, "Could not initialize hdcp_message\n");
>  		kfree(hdcp_message);
> -		return ret;
> +		hdcp_message = ERR_PTR(ret);
>  	}
> 
> -	display->hdcp.hdcp_message = hdcp_message;
> -	return ret;
> +	return hdcp_message;
>  }
> 
> -void intel_hdcp_gsc_free_message(struct intel_display *display)
> +void intel_hdcp_gsc_free_message(struct intel_hdcp_gsc_message
> +*hdcp_message)
>  {
> -	struct intel_hdcp_gsc_message *hdcp_message = display-
> >hdcp.hdcp_message;
> +	if (!hdcp_message)
> +		return;
> 
> -	if (hdcp_message) {
> -		xe_bo_unpin_map_no_vm(hdcp_message->hdcp_bo);
> -		kfree(hdcp_message);
> -		display->hdcp.hdcp_message = NULL;
> -	}
> +	xe_bo_unpin_map_no_vm(hdcp_message->hdcp_bo);
> +	kfree(hdcp_message);
>  }
> 
>  static int xe_gsc_send_sync(struct xe_device *xe,
> --
> 2.39.5



More information about the Intel-xe mailing list