[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:18:52 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 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.
> - 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 ? >->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 = >->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
More information about the Intel-xe
mailing list