> -----Original Message----- > From: Nikula, Jani <jani.nikula@xxxxxxxxx> > Sent: Tuesday, September 10, 2024 2:49 PM > To: Kandpal, Suraj <suraj.kandpal@xxxxxxxxx>; intel- > gfx@xxxxxxxxxxxxxxxxxxxxx; intel-xe@xxxxxxxxxxxxxxxxxxxxx > Cc: Shankar, Uma <uma.shankar@xxxxxxxxx>; Nautiyal, Ankit K > <ankit.k.nautiyal@xxxxxxxxx>; Kandpal, Suraj <suraj.kandpal@xxxxxxxxx> > Subject: Re: [PATCH 2/2] drm/i915/hdcp: Use intel_display in hdcp_gsc > > On Tue, 10 Sep 2024, Suraj Kandpal <suraj.kandpal@xxxxxxxxx> wrote: > > Use intel_display structure instead of drm_i915_private wherever > > possible in hdcp_gsc related files. > > > > Signed-off-by: Suraj Kandpal <suraj.kandpal@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/display/intel_hdcp.c | 4 +- > > drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 31 ++++++------- > > drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 4 +- > > .../drm/i915/display/intel_hdcp_gsc_message.c | 44 +++++++++---------- > > drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 23 +++++----- > > 5 files changed, 54 insertions(+), 52 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c > > b/drivers/gpu/drm/i915/display/intel_hdcp.c > > index 964372f4343b..efc62711274f 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > > @@ -2306,7 +2306,7 @@ void intel_hdcp_component_init(struct > drm_i915_private *i915) > > display->hdcp.comp_added = true; > > mutex_unlock(&display->hdcp.hdcp_mutex); > > if (intel_hdcp_gsc_cs_required(display)) > > - ret = intel_hdcp_gsc_init(i915); > > + ret = intel_hdcp_gsc_init(display); > > else > > ret = component_add_typed(display->drm->dev, > &i915_hdcp_ops, > > I915_COMPONENT_HDCP); > > @@ -2569,7 +2569,7 @@ void intel_hdcp_component_fini(struct > drm_i915_private *i915) > > mutex_unlock(&display->hdcp.hdcp_mutex); > > > > if (intel_hdcp_gsc_cs_required(display)) > > - intel_hdcp_gsc_fini(i915); > > + intel_hdcp_gsc_fini(display); > > else > > component_del(display->drm->dev, &i915_hdcp_ops); } diff > --git > > a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > > index dc5cc1d54c85..55965844d829 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > > @@ -107,8 +107,9 @@ static const struct i915_hdcp_ops gsc_hdcp_ops = { > > .close_hdcp_session = intel_hdcp_gsc_close_session, }; > > > > -static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) > > +static int 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; > > > > @@ -121,19 +122,19 @@ static int intel_hdcp_gsc_hdcp2_init(struct > drm_i915_private *i915) > > * NOTE: No need to lock the comp mutex here as it is already > > * going to be taken before this function called > > */ > > - i915->display.hdcp.hdcp_message = hdcp_message; > > + display->hdcp.hdcp_message = hdcp_message; > > ret = intel_hdcp_gsc_initialize_message(i915, hdcp_message); > > > > if (ret) > > - drm_err(&i915->drm, "Could not initialize > hdcp_message\n"); > > + drm_err(display->drm, "Could not initialize > hdcp_message\n"); > > > > return ret; > > } > > > > -static void intel_hdcp_gsc_free_message(struct drm_i915_private > > *i915) > > +static void intel_hdcp_gsc_free_message(struct intel_display > > +*display) > > { > > struct intel_hdcp_gsc_message *hdcp_message = > > - i915->display.hdcp.hdcp_message; > > + display->hdcp.hdcp_message; > > > > hdcp_message->hdcp_cmd_in = NULL; > > hdcp_message->hdcp_cmd_out = NULL; > > @@ -141,7 +142,7 @@ static void intel_hdcp_gsc_free_message(struct > drm_i915_private *i915) > > kfree(hdcp_message); > > } > > > > -int intel_hdcp_gsc_init(struct drm_i915_private *i915) > > +int intel_hdcp_gsc_init(struct intel_display *display) > > { > > struct i915_hdcp_arbiter *data; > > int ret; > > @@ -150,20 +151,20 @@ int intel_hdcp_gsc_init(struct drm_i915_private > *i915) > > if (!data) > > return -ENOMEM; > > > > - mutex_lock(&i915->display.hdcp.hdcp_mutex); > > - i915->display.hdcp.arbiter = data; > > - i915->display.hdcp.arbiter->hdcp_dev = i915->drm.dev; > > - i915->display.hdcp.arbiter->ops = &gsc_hdcp_ops; > > - ret = intel_hdcp_gsc_hdcp2_init(i915); > > - mutex_unlock(&i915->display.hdcp.hdcp_mutex); > > + mutex_lock(&display->hdcp.hdcp_mutex); > > + display->hdcp.arbiter = data; > > + display->hdcp.arbiter->hdcp_dev = display->drm->dev; > > + display->hdcp.arbiter->ops = &gsc_hdcp_ops; > > + ret = intel_hdcp_gsc_hdcp2_init(display); > > + mutex_unlock(&display->hdcp.hdcp_mutex); > > > > return ret; > > } > > > > -void intel_hdcp_gsc_fini(struct drm_i915_private *i915) > > +void intel_hdcp_gsc_fini(struct intel_display *display) > > { > > - intel_hdcp_gsc_free_message(i915); > > - kfree(i915->display.hdcp.arbiter); > > + intel_hdcp_gsc_free_message(display); > > + kfree(display->hdcp.arbiter); > > } > > > > static int intel_gsc_send_sync(struct drm_i915_private *i915, diff > > --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > index b6aabd855478..5695a5e4f609 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > @@ -17,8 +17,8 @@ bool intel_hdcp_gsc_cs_required(struct intel_display > > *display); ssize_t intel_hdcp_gsc_msg_send(struct drm_i915_private > *i915, u8 *msg_in, > > size_t msg_in_len, u8 *msg_out, > > size_t msg_out_len); > > -int intel_hdcp_gsc_init(struct drm_i915_private *i915); -void > > intel_hdcp_gsc_fini(struct drm_i915_private *i915); > > +int intel_hdcp_gsc_init(struct intel_display *display); void > > +intel_hdcp_gsc_fini(struct intel_display *display); > > bool intel_hdcp_gsc_check_status(struct intel_display *display); > > > > #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 35bdb532bbb3..129104fa9b16 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > > @@ -46,12 +46,12 @@ intel_hdcp_gsc_initiate_session(struct device *dev, > struct hdcp_port_data *data, > > (u8 *)&session_init_out, > > sizeof(session_init_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (session_init_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > WIRED_INITIATE_HDCP2_SESSION, > > session_init_out.header.status); > > return -EIO; > > @@ -108,12 +108,12 @@ > intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > > (u8 *)&verify_rxcert_out, > > sizeof(verify_rxcert_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed: %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed: %zd\n", > > +byte); > > return byte; > > } > > > > if (verify_rxcert_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > WIRED_VERIFY_RECEIVER_CERT, > > verify_rxcert_out.header.status); > > return -EIO; > > @@ -171,12 +171,12 @@ intel_hdcp_gsc_verify_hprime(struct device > *dev, struct hdcp_port_data *data, > > (u8 *)&send_hprime_out, > > sizeof(send_hprime_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (send_hprime_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X Failed. Status: > 0x%X\n", > > WIRED_AKE_SEND_HPRIME, > send_hprime_out.header.status); > > return -EIO; > > } > > @@ -222,12 +222,12 @@ intel_hdcp_gsc_store_pairing_info(struct device > *dev, struct hdcp_port_data *dat > > (u8 *)&pairing_info_out, > > sizeof(pairing_info_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (pairing_info_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. Status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. Status: > 0x%X\n", > > WIRED_AKE_SEND_PAIRING_INFO, > > pairing_info_out.header.status); > > return -EIO; > > @@ -269,12 +269,12 @@ intel_hdcp_gsc_initiate_locality_check(struct > device *dev, > > byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&lc_init_in, > sizeof(lc_init_in), > > (u8 *)&lc_init_out, sizeof(lc_init_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (lc_init_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X Failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X Failed. status: > 0x%X\n", > > WIRED_INIT_LOCALITY_CHECK, > lc_init_out.header.status); > > return -EIO; > > } > > @@ -323,12 +323,12 @@ intel_hdcp_gsc_verify_lprime(struct device *dev, > struct hdcp_port_data *data, > > (u8 *)&verify_lprime_out, > > sizeof(verify_lprime_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (verify_lprime_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > WIRED_VALIDATE_LOCALITY, > > verify_lprime_out.header.status); > > return -EIO; > > @@ -369,12 +369,12 @@ int intel_hdcp_gsc_get_session_key(struct > device *dev, > > byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&get_skey_in, > sizeof(get_skey_in), > > (u8 *)&get_skey_out, > sizeof(get_skey_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (get_skey_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > WIRED_GET_SESSION_KEY, > get_skey_out.header.status); > > return -EIO; > > } > > @@ -435,12 +435,12 @@ > intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > > (u8 *)&verify_repeater_out, > > sizeof(verify_repeater_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (verify_repeater_out.header.status != FW_HDCP_STATUS_SUCCESS) > { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > WIRED_VERIFY_REPEATER, > > verify_repeater_out.header.status); > > return -EIO; > > @@ -504,12 +504,12 @@ int intel_hdcp_gsc_verify_mprime(struct device > *dev, > > sizeof(verify_mprime_out)); > > kfree(verify_mprime_in); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (verify_mprime_out.header.status != FW_HDCP_STATUS_SUCCESS) > { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > WIRED_REPEATER_AUTH_STREAM_REQ, > > verify_mprime_out.header.status); > > return -EIO; > > @@ -552,12 +552,12 @@ int intel_hdcp_gsc_enable_authentication(struct > device *dev, > > (u8 *)&enable_auth_out, > > sizeof(enable_auth_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (enable_auth_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "FW cmd 0x%08X failed. status: > 0x%X\n", > > WIRED_ENABLE_AUTH, > enable_auth_out.header.status); > > return -EIO; > > } > > @@ -599,12 +599,12 @@ intel_hdcp_gsc_close_session(struct device > *dev, struct hdcp_port_data *data) > > (u8 *)&session_close_out, > > sizeof(session_close_out)); > > if (byte < 0) { > > - drm_dbg_kms(&i915->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", byte); > > + drm_dbg_kms(display->drm, "intel_hdcp_gsc_msg_send > failed. %zd\n", > > +byte); > > return byte; > > } > > > > if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { > > - drm_dbg_kms(&i915->drm, "Session Close Failed. status: > 0x%X\n", > > + drm_dbg_kms(display->drm, "Session Close Failed. status: > 0x%X\n", > > session_close_out.header.status); > > return -EIO; > > } > > diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c > > b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c > > index 5badf90b26de..437839b8c847 100644 > > --- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c > > +++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c > > @@ -138,42 +138,43 @@ static const struct i915_hdcp_ops gsc_hdcp_ops > = { > > .close_hdcp_session = intel_hdcp_gsc_close_session, }; > > > > -int intel_hdcp_gsc_init(struct xe_device *xe) > > +int intel_hdcp_gsc_init(struct intel_display *display) > > { > > struct i915_hdcp_arbiter *data; > > + struct xe_device *xe = to_xe_device(display->drm); > > int ret; > > > > data = kzalloc(sizeof(*data), GFP_KERNEL); > > if (!data) > > return -ENOMEM; > > > > - mutex_lock(&xe->display.hdcp.hdcp_mutex); > > - xe->display.hdcp.arbiter = data; > > - xe->display.hdcp.arbiter->hdcp_dev = xe->drm.dev; > > - xe->display.hdcp.arbiter->ops = &gsc_hdcp_ops; > > + mutex_lock(&display->hdcp.hdcp_mutex); > > + display->hdcp.arbiter = data; > > + display->hdcp.arbiter->hdcp_dev = display->drm->dev; > > + display->hdcp.arbiter->ops = &gsc_hdcp_ops; > > ret = intel_hdcp_gsc_hdcp2_init(xe); > > This needs to accept display as well. Or are you going to do the full > xe_hdcp_gsc.c conversion in a separate patch? > Looks like I missed this will fix in this patch itself in the next revision Regards, Suraj Kandpal > BR, > Jani. > > > if (ret) > > kfree(data); > > > > - mutex_unlock(&xe->display.hdcp.hdcp_mutex); > > + mutex_unlock(&display->hdcp.hdcp_mutex); > > > > return ret; > > } > > > > -void intel_hdcp_gsc_fini(struct xe_device *xe) > > +void intel_hdcp_gsc_fini(struct intel_display *display) > > { > > struct intel_hdcp_gsc_message *hdcp_message = > > - xe->display.hdcp.hdcp_message; > > - struct i915_hdcp_arbiter *arb = xe->display.hdcp.arbiter; > > + display->hdcp.hdcp_message; > > + struct i915_hdcp_arbiter *arb = display->hdcp.arbiter; > > > > if (hdcp_message) { > > xe_bo_unpin_map_no_vm(hdcp_message->hdcp_bo); > > kfree(hdcp_message); > > - xe->display.hdcp.hdcp_message = NULL; > > + display->hdcp.hdcp_message = NULL; > > } > > > > kfree(arb); > > - xe->display.hdcp.arbiter = NULL; > > + display->hdcp.arbiter = NULL; > > } > > > > static int xe_gsc_send_sync(struct xe_device *xe, > > -- > Jani Nikula, Intel