[PATCH 09/10] drm/i915/hdcp: pass struct drm_device to driver specific HDCP GSC code

Kandpal, Suraj suraj.kandpal at intel.com
Fri May 2 09:45:48 UTC 2025



> -----Original Message-----
> From: Nikula, Jani <jani.nikula at intel.com>
> Sent: Friday, May 2, 2025 2:53 PM
> To: Kandpal, Suraj <suraj.kandpal at intel.com>; intel-gfx at lists.freedesktop.org;
> intel-xe at lists.freedesktop.org
> Subject: RE: [PATCH 09/10] drm/i915/hdcp: pass struct drm_device to driver
> specific HDCP GSC code
> 
> On Fri, 02 May 2025, "Kandpal, Suraj" <suraj.kandpal at intel.com> wrote:
> >> -----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 09/10] drm/i915/hdcp: pass struct drm_device to
> >> driver specific HDCP GSC code
> >>
> >> The driver specific HDCP GSC code will eventually be part of the
> >> driver cores rather than display. Remove the struct intel_display
> >> references from them, and pass struct drm_device instead.
> >>
> >> Cc: Suraj Kandpal <suraj.kandpal at intel.com>
> >> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/display/intel_hdcp.c        |  2 +-
> >>  drivers/gpu/drm/i915/display/intel_hdcp_gsc.c    | 12 ++++++------
> >>  drivers/gpu/drm/i915/display/intel_hdcp_gsc.h    |  6 +++---
> >>  .../drm/i915/display/intel_hdcp_gsc_message.c    |  2 +-
> >>  drivers/gpu/drm/xe/display/xe_hdcp_gsc.c         | 16 ++++++++--------
> >>  5 files changed, 19 insertions(+), 19 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c
> >> b/drivers/gpu/drm/i915/display/intel_hdcp.c
> >> index 39bcf8f3d810..3e3038f4ee1f 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_hdcp.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
> >> @@ -254,7 +254,7 @@ static bool intel_hdcp2_prerequisite(struct
> >> intel_connector *connector)
> >>
> >>  	/* If MTL+ make sure gsc is loaded and proxy is setup */
> >>  	if (USE_HDCP_GSC(display)) {
> >> -		if (!intel_hdcp_gsc_check_status(display))
> >> +		if (!intel_hdcp_gsc_check_status(display->drm))
> >>  			return false;
> >>  	}
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> >> b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> >> index 4194ef77f7c3..6a22862d6be1 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c
> >> @@ -19,14 +19,14 @@ struct intel_hdcp_gsc_context {
> >>  	void *hdcp_cmd_out;
> >>  };
> >>
> >> -bool intel_hdcp_gsc_check_status(struct intel_display *display)
> >> +bool intel_hdcp_gsc_check_status(struct drm_device *drm)
> >>  {
> >
> > So the thing is this particular function won't be a part of the drm
> > core seeing this actually is a intel specific Check to see if gsc cs is present or
> not.
> 
> Not *drm* core, but i915 or xe "driver core", after display has been split out.
> 
> With that clarification, does the patch make more sense? :)

Ahh ohkay

In that case
Reviewed-by: Suraj Kandpal <suraj.kandpal at intel.com>

> 
> BR,
> Jani.
> 
> 
> >
> >> -	struct drm_i915_private *i915 = to_i915(display->drm);
> >> +	struct drm_i915_private *i915 = to_i915(drm);
> >>  	struct intel_gt *gt = i915->media_gt;
> >>  	struct intel_gsc_uc *gsc = gt ? &gt->uc.gsc : NULL;
> >>
> >>  	if (!gsc || !intel_uc_fw_is_running(&gsc->fw)) {
> >> -		drm_dbg_kms(display->drm,
> >> +		drm_dbg_kms(&i915->drm,
> >>  			    "GSC components required for HDCP2.2 are not
> ready\n");
> >>  		return false;
> >>  	}
> >> @@ -87,9 +87,9 @@ static int intel_hdcp_gsc_initialize_message(struct
> >> drm_i915_private *i915,
> >>  	return err;
> >>  }
> >>
> >> -struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> intel_display *display)
> >> +struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> +drm_device *drm)
> >
> > Same thing here this gsc context is the message we get to send to gsc
> > cs Again intel specific this initialization will be specific to each
> > driver based on Whom it wants to send this data(mei or some other fw
> > component)  Too or do the calculations on driver level itself.
> >
> >>  {
> >> -	struct drm_i915_private *i915 = to_i915(display->drm);
> >> +	struct drm_i915_private *i915 = to_i915(drm);
> >>  	struct intel_hdcp_gsc_context *gsc_context;
> >>  	int ret;
> >>
> >> @@ -103,7 +103,7 @@ struct intel_hdcp_gsc_context
> >> *intel_hdcp_gsc_context_alloc(struct intel_display
> >>  	 */
> >>  	ret = intel_hdcp_gsc_initialize_message(i915, gsc_context);
> >>  	if (ret) {
> >> -		drm_err(display->drm, "Could not initialize gsc_context\n");
> >> +		drm_err(&i915->drm, "Could not initialize gsc_context\n");
> >>  		kfree(gsc_context);
> >>  		gsc_context = ERR_PTR(ret);
> >>  	}
> >> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> >> b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> >> index e963c1fcc39e..e014336aa2e4 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
> >> @@ -9,15 +9,15 @@
> >>  #include <linux/err.h>
> >>  #include <linux/types.h>
> >>
> >> -struct intel_display;
> >> +struct drm_device;
> >>  struct intel_hdcp_gsc_context;
> >>
> >>  ssize_t intel_hdcp_gsc_msg_send(struct intel_hdcp_gsc_context
> *gsc_context,
> >>  				void *msg_in, size_t msg_in_len,
> >>  				void *msg_out, size_t msg_out_len); -bool
> >> intel_hdcp_gsc_check_status(struct intel_display *display);
> >> +bool intel_hdcp_gsc_check_status(struct drm_device *drm);
> >>
> >> -struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> intel_display *display);
> >> +struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> +drm_device *drm);
> >>  void intel_hdcp_gsc_context_free(struct intel_hdcp_gsc_context
> >> *gsc_context);
> >>
> >>  #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 4226e8705d2b..98967bb148e3 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
> >> @@ -645,7 +645,7 @@ int intel_hdcp_gsc_init(struct intel_display
> >> *display)
> >>
> >>  	mutex_lock(&display->hdcp.hdcp_mutex);
> >>
> >> -	gsc_context = intel_hdcp_gsc_context_alloc(display);
> >> +	gsc_context = intel_hdcp_gsc_context_alloc(display->drm);
> >>  	if (IS_ERR(gsc_context)) {
> >>  		ret = PTR_ERR(gsc_context);
> >>  		kfree(arbiter);
> >> diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> >> b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> >> index 078916072c10..b35a6f201d4a 100644
> >> --- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> >> +++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> >> @@ -30,9 +30,9 @@ struct intel_hdcp_gsc_context {
> >>
> >>  #define HDCP_GSC_HEADER_SIZE sizeof(struct intel_gsc_mtl_header)
> >>
> >> -bool intel_hdcp_gsc_check_status(struct intel_display *display)
> >> +bool intel_hdcp_gsc_check_status(struct drm_device *drm)
> >>  {
> >> -	struct xe_device *xe = to_xe_device(display->drm);
> >> +	struct xe_device *xe = to_xe_device(drm);
> >>  	struct xe_tile *tile = xe_device_get_root_tile(xe);
> >>  	struct xe_gt *gt = tile->media_gt;
> >>  	struct xe_gsc *gsc = &gt->uc.gsc;
> >> @@ -64,10 +64,9 @@ bool intel_hdcp_gsc_check_status(struct
> >> intel_display
> >> *display)  }
> >>
> >>  /*This function helps allocate memory for the command that we will
> >> send to gsc cs */ -static int
> >> intel_hdcp_gsc_initialize_message(struct intel_display *display,
> >> +static int intel_hdcp_gsc_initialize_message(struct xe_device *xe,
> >>  					     struct intel_hdcp_gsc_context
> >> *gsc_context)  {
> >
> > Ditto
> >
> > Regards,
> > Suraj Kandpal
> >
> >> -	struct xe_device *xe = to_xe_device(display->drm);
> >>  	struct xe_bo *bo = NULL;
> >>  	u64 cmd_in, cmd_out;
> >>  	int ret = 0;
> >> @@ -79,7 +78,7 @@ static int intel_hdcp_gsc_initialize_message(struct
> >> intel_display *display,
> >>  				  XE_BO_FLAG_GGTT);
> >>
> >>  	if (IS_ERR(bo)) {
> >> -		drm_err(display->drm, "Failed to allocate bo for HDCP
> >> streaming command!\n");
> >> +		drm_err(&xe->drm, "Failed to allocate bo for HDCP streaming
> >> +command!\n");
> >>  		ret = PTR_ERR(bo);
> >>  		goto out;
> >>  	}
> >> @@ -97,8 +96,9 @@ static int intel_hdcp_gsc_initialize_message(struct
> >> intel_display *display,
> >>  	return ret;
> >>  }
> >>
> >> -struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> intel_display *display)
> >> +struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct
> >> +drm_device *drm)
> >>  {
> >> +	struct xe_device *xe = to_xe_device(drm);
> >>  	struct intel_hdcp_gsc_context *gsc_context;
> >>  	int ret;
> >>
> >> @@ -110,9 +110,9 @@ struct intel_hdcp_gsc_context
> >> *intel_hdcp_gsc_context_alloc(struct intel_display
> >>  	 * NOTE: No need to lock the comp mutex here as it is already
> >>  	 * going to be taken before this function called
> >>  	 */
> >> -	ret = intel_hdcp_gsc_initialize_message(display, gsc_context);
> >> +	ret = intel_hdcp_gsc_initialize_message(xe, gsc_context);
> >>  	if (ret) {
> >> -		drm_err(display->drm, "Could not initialize gsc_context\n");
> >> +		drm_err(&xe->drm, "Could not initialize gsc_context\n");
> >>  		kfree(gsc_context);
> >>  		gsc_context = ERR_PTR(ret);
> >>  	}
> >> --
> >> 2.39.5
> >
> 
> --
> Jani Nikula, Intel


More information about the Intel-xe mailing list