* [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE
@ 2023-09-20 6:36 Suraj Kandpal
2023-09-20 6:36 ` [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status Suraj Kandpal
` (12 more replies)
0 siblings, 13 replies; 26+ messages in thread
From: Suraj Kandpal @ 2023-09-20 6:36 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
This patch series contains some refactors for i915 side of things
which will help with a cleaner code and maximum reuse of code
for XE going forward.
Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Suraj Kandpal (2):
drm/i915/hdcp: Move checks for gsc health status
drm/i915/hdcp: Move common message filling function to its own file
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/display/intel_hdcp.c | 8 +-
drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 620 +-----------------
drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 3 +
4 files changed, 30 insertions(+), 602 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 26+ messages in thread* [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal @ 2023-09-20 6:36 ` Suraj Kandpal 2023-10-09 9:06 ` Shankar, Uma 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal ` (11 subsequent siblings) 12 siblings, 1 reply; 26+ messages in thread From: Suraj Kandpal @ 2023-09-20 6:36 UTC (permalink / raw) To: intel-gfx; +Cc: jani.nikula Move checks for gsc components required for HDCP 2.2 to work into intel_hdcp_gsc.c. This will also help with XE refactor on HDCP's side. Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/display/intel_hdcp.c | 8 +------- drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 14 ++++++++++++++ drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 1 + 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 8cca4793cf92..c89da3568ebd 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -173,14 +173,8 @@ bool intel_hdcp2_capable(struct intel_connector *connector) /* If MTL+ make sure gsc is loaded and proxy is setup */ if (intel_hdcp_gsc_cs_required(i915)) { - 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(&i915->drm, - "GSC components required for HDCP2.2 are not ready\n"); + if (!intel_hdcp_gsc_check_status(i915)) return false; - } } /* MEI/GSC interface is solid depending on which is used */ diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c index d753db3eef15..d355d610bc9f 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c @@ -17,6 +17,20 @@ bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) return DISPLAY_VER(i915) >= 14; } +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) +{ + 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(&i915->drm, + "GSC components required for HDCP2.2 are not ready\n"); + return false; + } + + return true; +} + static int gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, struct hdcp2_ake_init *ake_data) diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h index cbf96551e534..eba2057c5a9e 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h @@ -23,5 +23,6 @@ ssize_t intel_hdcp_gsc_msg_send(struct drm_i915_private *i915, u8 *msg_in, 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); +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); #endif /* __INTEL_HDCP_GCS_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status 2023-09-20 6:36 ` [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status Suraj Kandpal @ 2023-10-09 9:06 ` Shankar, Uma 0 siblings, 0 replies; 26+ messages in thread From: Shankar, Uma @ 2023-10-09 9:06 UTC (permalink / raw) To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org; +Cc: Nikula, Jani > -----Original Message----- > From: Kandpal, Suraj <suraj.kandpal@intel.com> > Sent: Wednesday, September 20, 2023 12:06 PM > To: intel-gfx@lists.freedesktop.org > Cc: Nikula, Jani <jani.nikula@intel.com>; Shankar, Uma > <uma.shankar@intel.com>; Kandpal, Suraj <suraj.kandpal@intel.com> > Subject: [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status > > Move checks for gsc components required for HDCP 2.2 to work into > intel_hdcp_gsc.c. This will also help with XE refactor on HDCP's side. Looks Good to me. Reviewed-by: Uma Shankar <uma.shankar@intel.com> > Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> > --- > drivers/gpu/drm/i915/display/intel_hdcp.c | 8 +------- > drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 14 ++++++++++++++ > drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 1 + > 3 files changed, 16 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c > b/drivers/gpu/drm/i915/display/intel_hdcp.c > index 8cca4793cf92..c89da3568ebd 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -173,14 +173,8 @@ bool intel_hdcp2_capable(struct intel_connector > *connector) > > /* If MTL+ make sure gsc is loaded and proxy is setup */ > if (intel_hdcp_gsc_cs_required(i915)) { > - 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(&i915->drm, > - "GSC components required for HDCP2.2 are > not ready\n"); > + if (!intel_hdcp_gsc_check_status(i915)) > return false; > - } > } > > /* MEI/GSC interface is solid depending on which is used */ diff --git > a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > index d753db3eef15..d355d610bc9f 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > @@ -17,6 +17,20 @@ bool intel_hdcp_gsc_cs_required(struct drm_i915_private > *i915) > return DISPLAY_VER(i915) >= 14; > } > > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) { > + 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(&i915->drm, > + "GSC components required for HDCP2.2 are not > ready\n"); > + return false; > + } > + > + return true; > +} > + > static int > gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, > struct hdcp2_ake_init *ake_data) > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > index cbf96551e534..eba2057c5a9e 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > @@ -23,5 +23,6 @@ ssize_t intel_hdcp_gsc_msg_send(struct drm_i915_private > *i915, u8 *msg_in, > 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); > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); > > #endif /* __INTEL_HDCP_GCS_H__ */ > -- > 2.25.1 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal 2023-09-20 6:36 ` [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status Suraj Kandpal @ 2023-09-20 6:36 ` Suraj Kandpal 2023-09-20 8:46 ` kernel test robot ` (3 more replies) 2023-09-20 7:05 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Refactor i915 HDCP for XE Patchwork ` (10 subsequent siblings) 12 siblings, 4 replies; 26+ messages in thread From: Suraj Kandpal @ 2023-09-20 6:36 UTC (permalink / raw) To: intel-gfx; +Cc: jani.nikula Create a new file intel_hdcp_gsc_message that contain functions which fill the hdcp messages we send to gsc cs this refactor will help us reuse code for Xe later on Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 618 +----------------- drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 2 + 3 files changed, 20 insertions(+), 601 deletions(-) diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index 1b2e02e9d92c..27b3da6e0e43 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -265,6 +265,7 @@ i915-y += \ display/intel_global_state.o \ display/intel_hdcp.o \ display/intel_hdcp_gsc.o \ + display/intel_hdcp_gsc_message.o \ display/intel_hotplug.o \ display/intel_hotplug_irq.o \ display/intel_hti.o \ diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c index d355d610bc9f..a1d44285769b 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c @@ -3,14 +3,12 @@ * Copyright 2023, Intel Corporation. */ -#include <drm/i915_hdcp_interface.h> - #include "gem/i915_gem_region.h" #include "gt/intel_gt.h" #include "gt/uc/intel_gsc_uc_heci_cmd_submit.h" -#include "i915_drv.h" #include "i915_utils.h" #include "intel_hdcp_gsc.h" +#include "intel_hdcp_gsc_message.h" bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) { @@ -31,604 +29,6 @@ bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) return true; } -static int -gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_init *ake_data) -{ - struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; - struct wired_cmd_initiate_hdcp2_session_out - session_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ake_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_init_in.header.api_version = HDCP_API_VERSION; - session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; - session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_init_in.header.buffer_len = - WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; - - session_init_in.port.integrated_port_type = data->port_type; - session_init_in.port.physical_port = (u8)data->hdcp_ddi; - session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - session_init_in.protocol = data->protocol; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, - sizeof(session_init_in), - (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); - 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", - WIRED_INITIATE_HDCP2_SESSION, - session_init_out.header.status); - return -EIO; - } - - ake_data->msg_id = HDCP_2_2_AKE_INIT; - ake_data->tx_caps = session_init_out.tx_caps; - memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_receiver_cert_prepare_km(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ake_send_cert *rx_cert, - bool *km_stored, - struct hdcp2_ake_no_stored_km - *ek_pub_km, - size_t *msg_sz) -{ - struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; - struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_rxcert_in.header.api_version = HDCP_API_VERSION; - verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; - verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_rxcert_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; - - verify_rxcert_in.port.integrated_port_type = data->port_type; - verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; - verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - verify_rxcert_in.cert_rx = rx_cert->cert_rx; - memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); - memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, - sizeof(verify_rxcert_in), - (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); - 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", - WIRED_VERIFY_RECEIVER_CERT, - verify_rxcert_out.header.status); - return -EIO; - } - - *km_stored = !!verify_rxcert_out.km_stored; - if (verify_rxcert_out.km_stored) { - ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_stored_km); - } else { - ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); - } - - memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, - sizeof(verify_rxcert_out.ekm_buff)); - - return 0; -} - -static int -gsc_hdcp_verify_hprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_hprime *rx_hprime) -{ - struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; - struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_hprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - send_hprime_in.header.api_version = HDCP_API_VERSION; - send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; - send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; - - send_hprime_in.port.integrated_port_type = data->port_type; - send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; - send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, - HDCP_2_2_H_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, - sizeof(send_hprime_in), - (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); - 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", - WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_store_pairing_info(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_pairing_info *pairing_info) -{ - struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; - struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !pairing_info) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - pairing_info_in.header.api_version = HDCP_API_VERSION; - pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; - pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; - pairing_info_in.header.buffer_len = - WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; - - pairing_info_in.port.integrated_port_type = data->port_type; - pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; - pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, - HDCP_2_2_E_KH_KM_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, - sizeof(pairing_info_in), - (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); - 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", - WIRED_AKE_SEND_PAIRING_INFO, - pairing_info_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_initiate_locality_check(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_lc_init *lc_init_data) -{ - struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; - struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !lc_init_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - lc_init_in.header.api_version = HDCP_API_VERSION; - lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; - lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; - - lc_init_in.port.integrated_port_type = data->port_type; - lc_init_in.port.physical_port = (u8)data->hdcp_ddi; - lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); - return -EIO; - } - - lc_init_data->msg_id = HDCP_2_2_LC_INIT; - memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_lprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_lc_send_lprime *rx_lprime) -{ - struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; - struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_lprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_lprime_in.header.api_version = HDCP_API_VERSION; - verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; - verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_lprime_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; - - verify_lprime_in.port.integrated_port_type = data->port_type; - verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; - verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, - HDCP_2_2_L_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, - sizeof(verify_lprime_in), - (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); - 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", - WIRED_VALIDATE_LOCALITY, - verify_lprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_get_session_key(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ske_send_eks *ske_data) -{ - struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; - struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ske_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - get_skey_in.header.api_version = HDCP_API_VERSION; - get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; - get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; - get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; - - get_skey_in.port.integrated_port_type = data->port_type; - get_skey_in.port.physical_port = (u8)data->hdcp_ddi; - get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_GET_SESSION_KEY, get_skey_out.header.status); - return -EIO; - } - - ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; - memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, - HDCP_2_2_E_DKEY_KS_LEN); - memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); - - return 0; -} - -static int -gsc_hdcp_repeater_check_flow_prepare_ack(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_send_receiverid_list - *rep_topology, - struct hdcp2_rep_send_ack - *rep_send_ack) -{ - struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; - struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !rep_topology || !rep_send_ack || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_repeater_in.header.api_version = HDCP_API_VERSION; - verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; - verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_repeater_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; - - verify_repeater_in.port.integrated_port_type = data->port_type; - verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; - verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, - HDCP_2_2_RXINFO_LEN); - memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, - HDCP_2_2_SEQ_NUM_LEN); - memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, - HDCP_2_2_V_PRIME_HALF_LEN); - memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, - HDCP_2_2_RECEIVER_IDS_MAX_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, - sizeof(verify_repeater_in), - (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); - 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", - WIRED_VERIFY_REPEATER, - verify_repeater_out.header.status); - return -EIO; - } - - memcpy(rep_send_ack->v, verify_repeater_out.v, - HDCP_2_2_V_PRIME_HALF_LEN); - rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; - - return 0; -} - -static int gsc_hdcp_verify_mprime(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_stream_ready *stream_ready) -{ - struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; - struct wired_cmd_repeater_auth_stream_req_out - verify_mprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - size_t cmd_size; - - if (!dev || !stream_ready || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - cmd_size = struct_size(verify_mprime_in, streams, data->k); - if (cmd_size == SIZE_MAX) - return -EINVAL; - - verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); - if (!verify_mprime_in) - return -ENOMEM; - - verify_mprime_in->header.api_version = HDCP_API_VERSION; - verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; - verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; - verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); - - verify_mprime_in->port.integrated_port_type = data->port_type; - verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; - verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); - drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); - - memcpy(verify_mprime_in->streams, data->streams, - array_size(data->k, sizeof(*data->streams))); - - verify_mprime_in->k = cpu_to_be16(data->k); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, - (u8 *)&verify_mprime_out, - 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); - 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", - WIRED_REPEATER_AUTH_STREAM_REQ, - verify_mprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_enable_authentication(struct device *dev, - struct hdcp_port_data *data) -{ - struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; - struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - enable_auth_in.header.api_version = HDCP_API_VERSION; - enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; - enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; - enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; - - enable_auth_in.port.integrated_port_type = data->port_type; - enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; - enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - enable_auth_in.stream_type = data->streams[0].stream_type; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, - sizeof(enable_auth_in), - (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); - 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", - WIRED_ENABLE_AUTH, enable_auth_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_close_session(struct device *dev, struct hdcp_port_data *data) -{ - struct wired_cmd_close_session_in session_close_in = { { 0 } }; - struct wired_cmd_close_session_out session_close_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_close_in.header.api_version = HDCP_API_VERSION; - session_close_in.header.command_id = WIRED_CLOSE_SESSION; - session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_close_in.header.buffer_len = - WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; - - session_close_in.port.integrated_port_type = data->port_type; - session_close_in.port.physical_port = (u8)data->hdcp_ddi; - session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, - sizeof(session_close_in), - (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); - return byte; - } - - if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { - drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", - session_close_out.header.status); - return -EIO; - } - - return 0; -} - -static const struct i915_hdcp_ops gsc_hdcp_ops = { - .initiate_hdcp2_session = gsc_hdcp_initiate_session, - .verify_receiver_cert_prepare_km = - gsc_hdcp_verify_receiver_cert_prepare_km, - .verify_hprime = gsc_hdcp_verify_hprime, - .store_pairing_info = gsc_hdcp_store_pairing_info, - .initiate_locality_check = gsc_hdcp_initiate_locality_check, - .verify_lprime = gsc_hdcp_verify_lprime, - .get_session_key = gsc_hdcp_get_session_key, - .repeater_check_flow_prepare_ack = - gsc_hdcp_repeater_check_flow_prepare_ack, - .verify_mprime = gsc_hdcp_verify_mprime, - .enable_hdcp_authentication = gsc_hdcp_enable_authentication, - .close_hdcp_session = gsc_hdcp_close_session, -}; - /*This function helps allocate memory for the command that we will send to gsc cs */ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, struct intel_hdcp_gsc_message *hdcp_message) @@ -681,6 +81,22 @@ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, return err; } +static const struct i915_hdcp_ops gsc_hdcp_ops = { + .initiate_hdcp2_session = intel_hdcp_gsc_initiate_session, + .verify_receiver_cert_prepare_km = + intel_hdcp_gsc_verify_receiver_cert_prepare_km, + .verify_hprime = intel_hdcp_gsc_verify_hprime, + .store_pairing_info = intel_hdcp_gsc_store_pairing_info, + .initiate_locality_check = intel_hdcp_gsc_initiate_locality_check, + .verify_lprime = intel_hdcp_gsc_verify_lprime, + .get_session_key = intel_hdcp_gsc_get_session_key, + .repeater_check_flow_prepare_ack = + intel_hdcp_gsc_repeater_check_flow_prepare_ack, + .verify_mprime = intel_hdcp_gsc_verify_mprime, + .enable_hdcp_authentication = intel_hdcp_gsc_enable_authentication, + .close_hdcp_session = intel_hdcp_gsc_close_session, +}; + static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) { struct intel_hdcp_gsc_message *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 eba2057c5a9e..e53dbe8d9048 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h @@ -9,6 +9,8 @@ #include <linux/err.h> #include <linux/types.h> +#include "i915_drv.h" + struct drm_i915_private; struct intel_hdcp_gsc_message { -- 2.25.1 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal @ 2023-09-20 8:46 ` kernel test robot 2023-09-20 8:50 ` Suraj Kandpal ` (2 subsequent siblings) 3 siblings, 0 replies; 26+ messages in thread From: kernel test robot @ 2023-09-20 8:46 UTC (permalink / raw) To: Suraj Kandpal, intel-gfx; +Cc: jani.nikula, oe-kbuild-all Hi Suraj, kernel test robot noticed the following build errors: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-i915-hdcp-Move-checks-for-gsc-health-status/20230920-143839 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230920063611.242942-3-suraj.kandpal%40intel.com patch subject: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file config: x86_64-buildonly-randconfig-001-20230920 (https://download.01.org/0day-ci/archive/20230920/202309201638.5N9aAfd1-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/202309201638.5N9aAfd1-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309201638.5N9aAfd1-lkp@intel.com/ All errors (new ones prefixed by >>): make[7]: *** [scripts/Makefile.build:243: drivers/gpu/drm/i915/display/intel_hdcp_gsc.o] Error 1 shuffle=3352712196 >> make[7]: *** No rule to make target 'drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o', needed by 'drivers/gpu/drm/i915/built-in.a'. make[7]: Target 'drivers/gpu/drm/i915/' not remade because of errors. -- >> drivers/gpu/drm/i915/display/intel_hdcp_gsc.c:11:10: fatal error: intel_hdcp_gsc_message.h: No such file or directory 11 | #include "intel_hdcp_gsc_message.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. vim +11 drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > 11 #include "intel_hdcp_gsc_message.h" 12 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal 2023-09-20 8:46 ` kernel test robot @ 2023-09-20 8:50 ` Suraj Kandpal 2023-09-20 9:13 ` Jani Nikula 2023-09-20 10:38 ` [Intel-gfx] [PATCH v3 " Suraj Kandpal 2023-09-20 9:30 ` [Intel-gfx] [PATCH " kernel test robot 2023-09-21 15:32 ` kernel test robot 3 siblings, 2 replies; 26+ messages in thread From: Suraj Kandpal @ 2023-09-20 8:50 UTC (permalink / raw) To: intel-gfx Create a new file intel_hdcp_gsc_message that contain functions which fill the hdcp messages we send to gsc cs this refactor will help us reuse code for Xe later on --v2 -add the missed file for proper build Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 618 +----------------- drivers/gpu/drm/i915/display/intel_hdcp_gsc.h | 2 + .../drm/i915/display/intel_hdcp_gsc_message.c | 588 +++++++++++++++++ .../drm/i915/display/intel_hdcp_gsc_message.h | 56 ++ 5 files changed, 664 insertions(+), 601 deletions(-) create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index 1b2e02e9d92c..27b3da6e0e43 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -265,6 +265,7 @@ i915-y += \ display/intel_global_state.o \ display/intel_hdcp.o \ display/intel_hdcp_gsc.o \ + display/intel_hdcp_gsc_message.o \ display/intel_hotplug.o \ display/intel_hotplug_irq.o \ display/intel_hti.o \ diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c index d355d610bc9f..a1d44285769b 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c @@ -3,14 +3,12 @@ * Copyright 2023, Intel Corporation. */ -#include <drm/i915_hdcp_interface.h> - #include "gem/i915_gem_region.h" #include "gt/intel_gt.h" #include "gt/uc/intel_gsc_uc_heci_cmd_submit.h" -#include "i915_drv.h" #include "i915_utils.h" #include "intel_hdcp_gsc.h" +#include "intel_hdcp_gsc_message.h" bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) { @@ -31,604 +29,6 @@ bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) return true; } -static int -gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_init *ake_data) -{ - struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; - struct wired_cmd_initiate_hdcp2_session_out - session_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ake_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_init_in.header.api_version = HDCP_API_VERSION; - session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; - session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_init_in.header.buffer_len = - WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; - - session_init_in.port.integrated_port_type = data->port_type; - session_init_in.port.physical_port = (u8)data->hdcp_ddi; - session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - session_init_in.protocol = data->protocol; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, - sizeof(session_init_in), - (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); - 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", - WIRED_INITIATE_HDCP2_SESSION, - session_init_out.header.status); - return -EIO; - } - - ake_data->msg_id = HDCP_2_2_AKE_INIT; - ake_data->tx_caps = session_init_out.tx_caps; - memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_receiver_cert_prepare_km(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ake_send_cert *rx_cert, - bool *km_stored, - struct hdcp2_ake_no_stored_km - *ek_pub_km, - size_t *msg_sz) -{ - struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; - struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_rxcert_in.header.api_version = HDCP_API_VERSION; - verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; - verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_rxcert_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; - - verify_rxcert_in.port.integrated_port_type = data->port_type; - verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; - verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - verify_rxcert_in.cert_rx = rx_cert->cert_rx; - memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); - memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, - sizeof(verify_rxcert_in), - (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); - 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", - WIRED_VERIFY_RECEIVER_CERT, - verify_rxcert_out.header.status); - return -EIO; - } - - *km_stored = !!verify_rxcert_out.km_stored; - if (verify_rxcert_out.km_stored) { - ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_stored_km); - } else { - ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); - } - - memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, - sizeof(verify_rxcert_out.ekm_buff)); - - return 0; -} - -static int -gsc_hdcp_verify_hprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_hprime *rx_hprime) -{ - struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; - struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_hprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - send_hprime_in.header.api_version = HDCP_API_VERSION; - send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; - send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; - - send_hprime_in.port.integrated_port_type = data->port_type; - send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; - send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, - HDCP_2_2_H_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, - sizeof(send_hprime_in), - (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); - 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", - WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_store_pairing_info(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_pairing_info *pairing_info) -{ - struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; - struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !pairing_info) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - pairing_info_in.header.api_version = HDCP_API_VERSION; - pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; - pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; - pairing_info_in.header.buffer_len = - WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; - - pairing_info_in.port.integrated_port_type = data->port_type; - pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; - pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, - HDCP_2_2_E_KH_KM_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, - sizeof(pairing_info_in), - (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); - 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", - WIRED_AKE_SEND_PAIRING_INFO, - pairing_info_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_initiate_locality_check(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_lc_init *lc_init_data) -{ - struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; - struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !lc_init_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - lc_init_in.header.api_version = HDCP_API_VERSION; - lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; - lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; - - lc_init_in.port.integrated_port_type = data->port_type; - lc_init_in.port.physical_port = (u8)data->hdcp_ddi; - lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); - return -EIO; - } - - lc_init_data->msg_id = HDCP_2_2_LC_INIT; - memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_lprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_lc_send_lprime *rx_lprime) -{ - struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; - struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_lprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_lprime_in.header.api_version = HDCP_API_VERSION; - verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; - verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_lprime_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; - - verify_lprime_in.port.integrated_port_type = data->port_type; - verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; - verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, - HDCP_2_2_L_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, - sizeof(verify_lprime_in), - (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); - 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", - WIRED_VALIDATE_LOCALITY, - verify_lprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_get_session_key(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ske_send_eks *ske_data) -{ - struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; - struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ske_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - get_skey_in.header.api_version = HDCP_API_VERSION; - get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; - get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; - get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; - - get_skey_in.port.integrated_port_type = data->port_type; - get_skey_in.port.physical_port = (u8)data->hdcp_ddi; - get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_GET_SESSION_KEY, get_skey_out.header.status); - return -EIO; - } - - ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; - memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, - HDCP_2_2_E_DKEY_KS_LEN); - memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); - - return 0; -} - -static int -gsc_hdcp_repeater_check_flow_prepare_ack(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_send_receiverid_list - *rep_topology, - struct hdcp2_rep_send_ack - *rep_send_ack) -{ - struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; - struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !rep_topology || !rep_send_ack || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_repeater_in.header.api_version = HDCP_API_VERSION; - verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; - verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_repeater_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; - - verify_repeater_in.port.integrated_port_type = data->port_type; - verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; - verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, - HDCP_2_2_RXINFO_LEN); - memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, - HDCP_2_2_SEQ_NUM_LEN); - memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, - HDCP_2_2_V_PRIME_HALF_LEN); - memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, - HDCP_2_2_RECEIVER_IDS_MAX_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, - sizeof(verify_repeater_in), - (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); - 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", - WIRED_VERIFY_REPEATER, - verify_repeater_out.header.status); - return -EIO; - } - - memcpy(rep_send_ack->v, verify_repeater_out.v, - HDCP_2_2_V_PRIME_HALF_LEN); - rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; - - return 0; -} - -static int gsc_hdcp_verify_mprime(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_stream_ready *stream_ready) -{ - struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; - struct wired_cmd_repeater_auth_stream_req_out - verify_mprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - size_t cmd_size; - - if (!dev || !stream_ready || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - cmd_size = struct_size(verify_mprime_in, streams, data->k); - if (cmd_size == SIZE_MAX) - return -EINVAL; - - verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); - if (!verify_mprime_in) - return -ENOMEM; - - verify_mprime_in->header.api_version = HDCP_API_VERSION; - verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; - verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; - verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); - - verify_mprime_in->port.integrated_port_type = data->port_type; - verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; - verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); - drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); - - memcpy(verify_mprime_in->streams, data->streams, - array_size(data->k, sizeof(*data->streams))); - - verify_mprime_in->k = cpu_to_be16(data->k); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, - (u8 *)&verify_mprime_out, - 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); - 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", - WIRED_REPEATER_AUTH_STREAM_REQ, - verify_mprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_enable_authentication(struct device *dev, - struct hdcp_port_data *data) -{ - struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; - struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - enable_auth_in.header.api_version = HDCP_API_VERSION; - enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; - enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; - enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; - - enable_auth_in.port.integrated_port_type = data->port_type; - enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; - enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - enable_auth_in.stream_type = data->streams[0].stream_type; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, - sizeof(enable_auth_in), - (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); - 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", - WIRED_ENABLE_AUTH, enable_auth_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_close_session(struct device *dev, struct hdcp_port_data *data) -{ - struct wired_cmd_close_session_in session_close_in = { { 0 } }; - struct wired_cmd_close_session_out session_close_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_close_in.header.api_version = HDCP_API_VERSION; - session_close_in.header.command_id = WIRED_CLOSE_SESSION; - session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_close_in.header.buffer_len = - WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; - - session_close_in.port.integrated_port_type = data->port_type; - session_close_in.port.physical_port = (u8)data->hdcp_ddi; - session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, - sizeof(session_close_in), - (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); - return byte; - } - - if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { - drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", - session_close_out.header.status); - return -EIO; - } - - return 0; -} - -static const struct i915_hdcp_ops gsc_hdcp_ops = { - .initiate_hdcp2_session = gsc_hdcp_initiate_session, - .verify_receiver_cert_prepare_km = - gsc_hdcp_verify_receiver_cert_prepare_km, - .verify_hprime = gsc_hdcp_verify_hprime, - .store_pairing_info = gsc_hdcp_store_pairing_info, - .initiate_locality_check = gsc_hdcp_initiate_locality_check, - .verify_lprime = gsc_hdcp_verify_lprime, - .get_session_key = gsc_hdcp_get_session_key, - .repeater_check_flow_prepare_ack = - gsc_hdcp_repeater_check_flow_prepare_ack, - .verify_mprime = gsc_hdcp_verify_mprime, - .enable_hdcp_authentication = gsc_hdcp_enable_authentication, - .close_hdcp_session = gsc_hdcp_close_session, -}; - /*This function helps allocate memory for the command that we will send to gsc cs */ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, struct intel_hdcp_gsc_message *hdcp_message) @@ -681,6 +81,22 @@ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, return err; } +static const struct i915_hdcp_ops gsc_hdcp_ops = { + .initiate_hdcp2_session = intel_hdcp_gsc_initiate_session, + .verify_receiver_cert_prepare_km = + intel_hdcp_gsc_verify_receiver_cert_prepare_km, + .verify_hprime = intel_hdcp_gsc_verify_hprime, + .store_pairing_info = intel_hdcp_gsc_store_pairing_info, + .initiate_locality_check = intel_hdcp_gsc_initiate_locality_check, + .verify_lprime = intel_hdcp_gsc_verify_lprime, + .get_session_key = intel_hdcp_gsc_get_session_key, + .repeater_check_flow_prepare_ack = + intel_hdcp_gsc_repeater_check_flow_prepare_ack, + .verify_mprime = intel_hdcp_gsc_verify_mprime, + .enable_hdcp_authentication = intel_hdcp_gsc_enable_authentication, + .close_hdcp_session = intel_hdcp_gsc_close_session, +}; + static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) { struct intel_hdcp_gsc_message *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 eba2057c5a9e..e53dbe8d9048 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h @@ -9,6 +9,8 @@ #include <linux/err.h> #include <linux/types.h> +#include "i915_drv.h" + struct drm_i915_private; struct intel_hdcp_gsc_message { diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c new file mode 100644 index 000000000000..7a697d0dd6cb --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c @@ -0,0 +1,588 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright 2023, Intel Corporation. + */ + +#include "intel_hdcp_gsc_message.h" + +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data) +{ + struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; + struct wired_cmd_initiate_hdcp2_session_out + session_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ake_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_init_in.header.api_version = HDCP_API_VERSION; + session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; + session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_init_in.header.buffer_len = + WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; + + session_init_in.port.integrated_port_type = data->port_type; + session_init_in.port.physical_port = (u8)data->hdcp_ddi; + session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + session_init_in.protocol = data->protocol; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, + sizeof(session_init_in), + (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); + 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", + WIRED_INITIATE_HDCP2_SESSION, + session_init_out.header.status); + return -EIO; + } + + ake_data->msg_id = HDCP_2_2_AKE_INIT; + ake_data->tx_caps = session_init_out.tx_caps; + memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz) +{ + struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; + struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_rxcert_in.header.api_version = HDCP_API_VERSION; + verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; + verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_rxcert_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; + + verify_rxcert_in.port.integrated_port_type = data->port_type; + verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; + verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + verify_rxcert_in.cert_rx = rx_cert->cert_rx; + memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); + memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, + sizeof(verify_rxcert_in), + (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); + 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", + WIRED_VERIFY_RECEIVER_CERT, + verify_rxcert_out.header.status); + return -EIO; + } + + *km_stored = !!verify_rxcert_out.km_stored; + if (verify_rxcert_out.km_stored) { + ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_stored_km); + } else { + ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); + } + + memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, + sizeof(verify_rxcert_out.ekm_buff)); + + return 0; +} + +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime) +{ + struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; + struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_hprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + send_hprime_in.header.api_version = HDCP_API_VERSION; + send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; + send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; + + send_hprime_in.port.integrated_port_type = data->port_type; + send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; + send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, + HDCP_2_2_H_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, + sizeof(send_hprime_in), + (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); + 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", + WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info) +{ + struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; + struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !pairing_info) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + pairing_info_in.header.api_version = HDCP_API_VERSION; + pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; + pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; + pairing_info_in.header.buffer_len = + WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; + + pairing_info_in.port.integrated_port_type = data->port_type; + pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; + pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, + HDCP_2_2_E_KH_KM_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, + sizeof(pairing_info_in), + (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); + 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", + WIRED_AKE_SEND_PAIRING_INFO, + pairing_info_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data) +{ + struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; + struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !lc_init_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + lc_init_in.header.api_version = HDCP_API_VERSION; + lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; + lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; + + lc_init_in.port.integrated_port_type = data->port_type; + lc_init_in.port.physical_port = (u8)data->hdcp_ddi; + lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); + return -EIO; + } + + lc_init_data->msg_id = HDCP_2_2_LC_INIT; + memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime) +{ + struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; + struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_lprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_lprime_in.header.api_version = HDCP_API_VERSION; + verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; + verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_lprime_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; + + verify_lprime_in.port.integrated_port_type = data->port_type; + verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; + verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, + HDCP_2_2_L_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, + sizeof(verify_lprime_in), + (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); + 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", + WIRED_VALIDATE_LOCALITY, + verify_lprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data) +{ + struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; + struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ske_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + get_skey_in.header.api_version = HDCP_API_VERSION; + get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; + get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; + get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; + + get_skey_in.port.integrated_port_type = data->port_type; + get_skey_in.port.physical_port = (u8)data->hdcp_ddi; + get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_GET_SESSION_KEY, get_skey_out.header.status); + return -EIO; + } + + ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; + memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, + HDCP_2_2_E_DKEY_KS_LEN); + memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); + + return 0; +} + +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack) +{ + struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; + struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !rep_topology || !rep_send_ack || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_repeater_in.header.api_version = HDCP_API_VERSION; + verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; + verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_repeater_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; + + verify_repeater_in.port.integrated_port_type = data->port_type; + verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; + verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, + HDCP_2_2_RXINFO_LEN); + memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, + HDCP_2_2_SEQ_NUM_LEN); + memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, + HDCP_2_2_V_PRIME_HALF_LEN); + memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, + HDCP_2_2_RECEIVER_IDS_MAX_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, + sizeof(verify_repeater_in), + (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); + 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", + WIRED_VERIFY_REPEATER, + verify_repeater_out.header.status); + return -EIO; + } + + memcpy(rep_send_ack->v, verify_repeater_out.v, + HDCP_2_2_V_PRIME_HALF_LEN); + rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; + + return 0; +} + +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready) +{ + struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; + struct wired_cmd_repeater_auth_stream_req_out + verify_mprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + size_t cmd_size; + + if (!dev || !stream_ready || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + cmd_size = struct_size(verify_mprime_in, streams, data->k); + if (cmd_size == SIZE_MAX) + return -EINVAL; + + verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); + if (!verify_mprime_in) + return -ENOMEM; + + verify_mprime_in->header.api_version = HDCP_API_VERSION; + verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; + verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; + verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); + + verify_mprime_in->port.integrated_port_type = data->port_type; + verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; + verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); + drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); + + memcpy(verify_mprime_in->streams, data->streams, + array_size(data->k, sizeof(*data->streams))); + + verify_mprime_in->k = cpu_to_be16(data->k); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, + (u8 *)&verify_mprime_out, + 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); + 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", + WIRED_REPEATER_AUTH_STREAM_REQ, + verify_mprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data) +{ + struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; + struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + enable_auth_in.header.api_version = HDCP_API_VERSION; + enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; + enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; + enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; + + enable_auth_in.port.integrated_port_type = data->port_type; + enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; + enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + enable_auth_in.stream_type = data->streams[0].stream_type; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, + sizeof(enable_auth_in), + (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); + 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", + WIRED_ENABLE_AUTH, enable_auth_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data) +{ + struct wired_cmd_close_session_in session_close_in = { { 0 } }; + struct wired_cmd_close_session_out session_close_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_close_in.header.api_version = HDCP_API_VERSION; + session_close_in.header.command_id = WIRED_CLOSE_SESSION; + session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_close_in.header.buffer_len = + WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; + + session_close_in.port.integrated_port_type = data->port_type; + session_close_in.port.physical_port = (u8)data->hdcp_ddi; + session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, + sizeof(session_close_in), + (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); + return byte; + } + + if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { + drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", + session_close_out.header.status); + return -EIO; + } + + return 0; +} diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h new file mode 100644 index 000000000000..8da3c50d759f --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023 Intel Corporation + */ + +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ +#define __INTEL_HDCP_GSC_MESSAGE_H__ + +#include <drm/i915_hdcp_interface.h> + +#include "intel_hdcp_gsc.h" + +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data); +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz); +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime); +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info); +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data); +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime); +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data); +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack); +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready); +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data); +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data); + +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 8:50 ` Suraj Kandpal @ 2023-09-20 9:13 ` Jani Nikula 2023-09-20 9:29 ` Kandpal, Suraj 2023-09-20 10:38 ` [Intel-gfx] [PATCH v3 " Suraj Kandpal 1 sibling, 1 reply; 26+ messages in thread From: Jani Nikula @ 2023-09-20 9:13 UTC (permalink / raw) To: Suraj Kandpal, intel-gfx On Wed, 20 Sep 2023, Suraj Kandpal <suraj.kandpal@intel.com> wrote: > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > index eba2057c5a9e..e53dbe8d9048 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > @@ -9,6 +9,8 @@ > #include <linux/err.h> > #include <linux/types.h> > > +#include "i915_drv.h" > + Please don't include i915_drv.h from headers if it can be avoided. This patch for sure has no reason to do so. > struct drm_i915_private; > > struct intel_hdcp_gsc_message { > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > new file mode 100644 > index 000000000000..8da3c50d759f > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > @@ -0,0 +1,56 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023 Intel Corporation > + */ > + > +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ > +#define __INTEL_HDCP_GSC_MESSAGE_H__ > + > +#include <drm/i915_hdcp_interface.h> > + > +#include "intel_hdcp_gsc.h" What in this header requires including either of those headers that can't be solved with forward declatations? *Always* use forward declarations instead of #includes in headers if you can. AFAICT this only needs #include <linux/types.h> and a bunch of forward declarations. BR, Jani. > + > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); > +int > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_init *ake_data); > +int > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ake_send_cert *rx_cert, > + bool *km_stored, > + struct hdcp2_ake_no_stored_km > + *ek_pub_km, > + size_t *msg_sz); > +int > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_hprime *rx_hprime); > +int > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_pairing_info *pairing_info); > +int > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_lc_init *lc_init_data); > +int > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_lc_send_lprime *rx_lprime); > +int intel_hdcp_gsc_get_session_key(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ske_send_eks *ske_data); > +int > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_send_receiverid_list > + *rep_topology, > + struct hdcp2_rep_send_ack > + *rep_send_ack); > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_stream_ready *stream_ready); > +int intel_hdcp_gsc_enable_authentication(struct device *dev, > + struct hdcp_port_data *data); > +int > +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data); > + > +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 9:13 ` Jani Nikula @ 2023-09-20 9:29 ` Kandpal, Suraj 0 siblings, 0 replies; 26+ messages in thread From: Kandpal, Suraj @ 2023-09-20 9:29 UTC (permalink / raw) To: Jani Nikula, intel-gfx@lists.freedesktop.org > Subject: Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message > filling function to its own file > > On Wed, 20 Sep 2023, Suraj Kandpal <suraj.kandpal@intel.com> wrote: > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > index eba2057c5a9e..e53dbe8d9048 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.h > > @@ -9,6 +9,8 @@ > > #include <linux/err.h> > > #include <linux/types.h> > > > > +#include "i915_drv.h" > > + > > Please don't include i915_drv.h from headers if it can be avoided. This patch for > sure has no reason to do so. > > > struct drm_i915_private; > > > > struct intel_hdcp_gsc_message { > > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > new file mode 100644 > > index 000000000000..8da3c50d759f > > --- /dev/null > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > @@ -0,0 +1,56 @@ > > +/* SPDX-License-Identifier: MIT */ > > +/* > > + * Copyright © 2023 Intel Corporation */ > > + > > +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ > > +#define __INTEL_HDCP_GSC_MESSAGE_H__ > > + > > +#include <drm/i915_hdcp_interface.h> > > + > > +#include "intel_hdcp_gsc.h" > > What in this header requires including either of those headers that can't be > solved with forward declatations? > > *Always* use forward declarations instead of #includes in headers if you can. > > AFAICT this only needs #include <linux/types.h> and a bunch of forward > declarations. > Thanks for the reviews Jani. Will six and send the latest version Regards, Suraj Kandpal > BR, > Jani. > > > + > > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); int > > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_ake_init *ake_data); int > > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_ake_send_cert > *rx_cert, > > + bool *km_stored, > > + struct hdcp2_ake_no_stored_km > > + *ek_pub_km, > > + size_t *msg_sz); > > +int > > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_ake_send_hprime *rx_hprime); int > > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_ake_send_pairing_info > *pairing_info); int > > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_lc_init *lc_init_data); int > > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_lc_send_lprime *rx_lprime); int > > +intel_hdcp_gsc_get_session_key(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_ske_send_eks *ske_data); int > > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > > + struct hdcp_port_data *data, > > + struct > hdcp2_rep_send_receiverid_list > > + *rep_topology, > > + struct hdcp2_rep_send_ack > > + *rep_send_ack); > > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_rep_stream_ready > *stream_ready); int > > +intel_hdcp_gsc_enable_authentication(struct device *dev, > > + struct hdcp_port_data *data); > > +int > > +intel_hdcp_gsc_close_session(struct device *dev, struct > > +hdcp_port_data *data); > > + > > +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ > > -- > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] [PATCH v3 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 8:50 ` Suraj Kandpal 2023-09-20 9:13 ` Jani Nikula @ 2023-09-20 10:38 ` Suraj Kandpal 2023-09-20 12:09 ` Jani Nikula 2023-09-21 5:38 ` [Intel-gfx] [PATCH v4 " Suraj Kandpal 1 sibling, 2 replies; 26+ messages in thread From: Suraj Kandpal @ 2023-09-20 10:38 UTC (permalink / raw) To: intel-gfx; +Cc: jani.nikula Create a new file intel_hdcp_gsc_message that contain functions which fill the hdcp messages we send to gsc cs this refactor will help us reuse code for Xe later on --v2 -add the missed file for proper build --v3 -use forward declarations instead of #includes [Jani] Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 615 +----------------- .../drm/i915/display/intel_hdcp_gsc_message.c | 591 +++++++++++++++++ .../drm/i915/display/intel_hdcp_gsc_message.h | 73 +++ 4 files changed, 682 insertions(+), 598 deletions(-) create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index 1b2e02e9d92c..27b3da6e0e43 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -265,6 +265,7 @@ i915-y += \ display/intel_global_state.o \ display/intel_hdcp.o \ display/intel_hdcp_gsc.o \ + display/intel_hdcp_gsc_message.o \ display/intel_hotplug.o \ display/intel_hotplug_irq.o \ display/intel_hti.o \ diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c index d355d610bc9f..18117b789b16 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c @@ -11,6 +11,7 @@ #include "i915_drv.h" #include "i915_utils.h" #include "intel_hdcp_gsc.h" +#include "intel_hdcp_gsc_message.h" bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) { @@ -31,604 +32,6 @@ bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) return true; } -static int -gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_init *ake_data) -{ - struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; - struct wired_cmd_initiate_hdcp2_session_out - session_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ake_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_init_in.header.api_version = HDCP_API_VERSION; - session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; - session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_init_in.header.buffer_len = - WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; - - session_init_in.port.integrated_port_type = data->port_type; - session_init_in.port.physical_port = (u8)data->hdcp_ddi; - session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - session_init_in.protocol = data->protocol; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, - sizeof(session_init_in), - (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); - 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", - WIRED_INITIATE_HDCP2_SESSION, - session_init_out.header.status); - return -EIO; - } - - ake_data->msg_id = HDCP_2_2_AKE_INIT; - ake_data->tx_caps = session_init_out.tx_caps; - memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_receiver_cert_prepare_km(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ake_send_cert *rx_cert, - bool *km_stored, - struct hdcp2_ake_no_stored_km - *ek_pub_km, - size_t *msg_sz) -{ - struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; - struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_rxcert_in.header.api_version = HDCP_API_VERSION; - verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; - verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_rxcert_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; - - verify_rxcert_in.port.integrated_port_type = data->port_type; - verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; - verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - verify_rxcert_in.cert_rx = rx_cert->cert_rx; - memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); - memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, - sizeof(verify_rxcert_in), - (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); - 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", - WIRED_VERIFY_RECEIVER_CERT, - verify_rxcert_out.header.status); - return -EIO; - } - - *km_stored = !!verify_rxcert_out.km_stored; - if (verify_rxcert_out.km_stored) { - ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_stored_km); - } else { - ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); - } - - memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, - sizeof(verify_rxcert_out.ekm_buff)); - - return 0; -} - -static int -gsc_hdcp_verify_hprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_hprime *rx_hprime) -{ - struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; - struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_hprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - send_hprime_in.header.api_version = HDCP_API_VERSION; - send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; - send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; - - send_hprime_in.port.integrated_port_type = data->port_type; - send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; - send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, - HDCP_2_2_H_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, - sizeof(send_hprime_in), - (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); - 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", - WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_store_pairing_info(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_pairing_info *pairing_info) -{ - struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; - struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !pairing_info) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - pairing_info_in.header.api_version = HDCP_API_VERSION; - pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; - pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; - pairing_info_in.header.buffer_len = - WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; - - pairing_info_in.port.integrated_port_type = data->port_type; - pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; - pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, - HDCP_2_2_E_KH_KM_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, - sizeof(pairing_info_in), - (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); - 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", - WIRED_AKE_SEND_PAIRING_INFO, - pairing_info_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_initiate_locality_check(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_lc_init *lc_init_data) -{ - struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; - struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !lc_init_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - lc_init_in.header.api_version = HDCP_API_VERSION; - lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; - lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; - - lc_init_in.port.integrated_port_type = data->port_type; - lc_init_in.port.physical_port = (u8)data->hdcp_ddi; - lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); - return -EIO; - } - - lc_init_data->msg_id = HDCP_2_2_LC_INIT; - memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_lprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_lc_send_lprime *rx_lprime) -{ - struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; - struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_lprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_lprime_in.header.api_version = HDCP_API_VERSION; - verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; - verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_lprime_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; - - verify_lprime_in.port.integrated_port_type = data->port_type; - verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; - verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, - HDCP_2_2_L_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, - sizeof(verify_lprime_in), - (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); - 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", - WIRED_VALIDATE_LOCALITY, - verify_lprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_get_session_key(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ske_send_eks *ske_data) -{ - struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; - struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ske_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - get_skey_in.header.api_version = HDCP_API_VERSION; - get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; - get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; - get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; - - get_skey_in.port.integrated_port_type = data->port_type; - get_skey_in.port.physical_port = (u8)data->hdcp_ddi; - get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_GET_SESSION_KEY, get_skey_out.header.status); - return -EIO; - } - - ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; - memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, - HDCP_2_2_E_DKEY_KS_LEN); - memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); - - return 0; -} - -static int -gsc_hdcp_repeater_check_flow_prepare_ack(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_send_receiverid_list - *rep_topology, - struct hdcp2_rep_send_ack - *rep_send_ack) -{ - struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; - struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !rep_topology || !rep_send_ack || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_repeater_in.header.api_version = HDCP_API_VERSION; - verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; - verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_repeater_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; - - verify_repeater_in.port.integrated_port_type = data->port_type; - verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; - verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, - HDCP_2_2_RXINFO_LEN); - memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, - HDCP_2_2_SEQ_NUM_LEN); - memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, - HDCP_2_2_V_PRIME_HALF_LEN); - memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, - HDCP_2_2_RECEIVER_IDS_MAX_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, - sizeof(verify_repeater_in), - (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); - 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", - WIRED_VERIFY_REPEATER, - verify_repeater_out.header.status); - return -EIO; - } - - memcpy(rep_send_ack->v, verify_repeater_out.v, - HDCP_2_2_V_PRIME_HALF_LEN); - rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; - - return 0; -} - -static int gsc_hdcp_verify_mprime(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_stream_ready *stream_ready) -{ - struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; - struct wired_cmd_repeater_auth_stream_req_out - verify_mprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - size_t cmd_size; - - if (!dev || !stream_ready || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - cmd_size = struct_size(verify_mprime_in, streams, data->k); - if (cmd_size == SIZE_MAX) - return -EINVAL; - - verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); - if (!verify_mprime_in) - return -ENOMEM; - - verify_mprime_in->header.api_version = HDCP_API_VERSION; - verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; - verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; - verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); - - verify_mprime_in->port.integrated_port_type = data->port_type; - verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; - verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); - drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); - - memcpy(verify_mprime_in->streams, data->streams, - array_size(data->k, sizeof(*data->streams))); - - verify_mprime_in->k = cpu_to_be16(data->k); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, - (u8 *)&verify_mprime_out, - 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); - 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", - WIRED_REPEATER_AUTH_STREAM_REQ, - verify_mprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_enable_authentication(struct device *dev, - struct hdcp_port_data *data) -{ - struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; - struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - enable_auth_in.header.api_version = HDCP_API_VERSION; - enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; - enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; - enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; - - enable_auth_in.port.integrated_port_type = data->port_type; - enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; - enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - enable_auth_in.stream_type = data->streams[0].stream_type; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, - sizeof(enable_auth_in), - (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); - 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", - WIRED_ENABLE_AUTH, enable_auth_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_close_session(struct device *dev, struct hdcp_port_data *data) -{ - struct wired_cmd_close_session_in session_close_in = { { 0 } }; - struct wired_cmd_close_session_out session_close_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_close_in.header.api_version = HDCP_API_VERSION; - session_close_in.header.command_id = WIRED_CLOSE_SESSION; - session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_close_in.header.buffer_len = - WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; - - session_close_in.port.integrated_port_type = data->port_type; - session_close_in.port.physical_port = (u8)data->hdcp_ddi; - session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, - sizeof(session_close_in), - (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); - return byte; - } - - if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { - drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", - session_close_out.header.status); - return -EIO; - } - - return 0; -} - -static const struct i915_hdcp_ops gsc_hdcp_ops = { - .initiate_hdcp2_session = gsc_hdcp_initiate_session, - .verify_receiver_cert_prepare_km = - gsc_hdcp_verify_receiver_cert_prepare_km, - .verify_hprime = gsc_hdcp_verify_hprime, - .store_pairing_info = gsc_hdcp_store_pairing_info, - .initiate_locality_check = gsc_hdcp_initiate_locality_check, - .verify_lprime = gsc_hdcp_verify_lprime, - .get_session_key = gsc_hdcp_get_session_key, - .repeater_check_flow_prepare_ack = - gsc_hdcp_repeater_check_flow_prepare_ack, - .verify_mprime = gsc_hdcp_verify_mprime, - .enable_hdcp_authentication = gsc_hdcp_enable_authentication, - .close_hdcp_session = gsc_hdcp_close_session, -}; - /*This function helps allocate memory for the command that we will send to gsc cs */ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, struct intel_hdcp_gsc_message *hdcp_message) @@ -681,6 +84,22 @@ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, return err; } +static const struct i915_hdcp_ops gsc_hdcp_ops = { + .initiate_hdcp2_session = intel_hdcp_gsc_initiate_session, + .verify_receiver_cert_prepare_km = + intel_hdcp_gsc_verify_receiver_cert_prepare_km, + .verify_hprime = intel_hdcp_gsc_verify_hprime, + .store_pairing_info = intel_hdcp_gsc_store_pairing_info, + .initiate_locality_check = intel_hdcp_gsc_initiate_locality_check, + .verify_lprime = intel_hdcp_gsc_verify_lprime, + .get_session_key = intel_hdcp_gsc_get_session_key, + .repeater_check_flow_prepare_ack = + intel_hdcp_gsc_repeater_check_flow_prepare_ack, + .verify_mprime = intel_hdcp_gsc_verify_mprime, + .enable_hdcp_authentication = intel_hdcp_gsc_enable_authentication, + .close_hdcp_session = intel_hdcp_gsc_close_session, +}; + static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) { struct intel_hdcp_gsc_message *hdcp_message; diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c new file mode 100644 index 000000000000..ebe086b00f64 --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c @@ -0,0 +1,591 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright 2023, Intel Corporation. + */ + +#include <drm/i915_hdcp_interface.h> + +#include "i915_drv.h" +#include "intel_hdcp_gsc_message.h" + +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data) +{ + struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; + struct wired_cmd_initiate_hdcp2_session_out + session_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ake_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_init_in.header.api_version = HDCP_API_VERSION; + session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; + session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_init_in.header.buffer_len = + WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; + + session_init_in.port.integrated_port_type = data->port_type; + session_init_in.port.physical_port = (u8)data->hdcp_ddi; + session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + session_init_in.protocol = data->protocol; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, + sizeof(session_init_in), + (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); + 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", + WIRED_INITIATE_HDCP2_SESSION, + session_init_out.header.status); + return -EIO; + } + + ake_data->msg_id = HDCP_2_2_AKE_INIT; + ake_data->tx_caps = session_init_out.tx_caps; + memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz) +{ + struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; + struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_rxcert_in.header.api_version = HDCP_API_VERSION; + verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; + verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_rxcert_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; + + verify_rxcert_in.port.integrated_port_type = data->port_type; + verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; + verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + verify_rxcert_in.cert_rx = rx_cert->cert_rx; + memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); + memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, + sizeof(verify_rxcert_in), + (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); + 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", + WIRED_VERIFY_RECEIVER_CERT, + verify_rxcert_out.header.status); + return -EIO; + } + + *km_stored = !!verify_rxcert_out.km_stored; + if (verify_rxcert_out.km_stored) { + ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_stored_km); + } else { + ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); + } + + memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, + sizeof(verify_rxcert_out.ekm_buff)); + + return 0; +} + +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime) +{ + struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; + struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_hprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + send_hprime_in.header.api_version = HDCP_API_VERSION; + send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; + send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; + + send_hprime_in.port.integrated_port_type = data->port_type; + send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; + send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, + HDCP_2_2_H_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, + sizeof(send_hprime_in), + (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); + 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", + WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info) +{ + struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; + struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !pairing_info) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + pairing_info_in.header.api_version = HDCP_API_VERSION; + pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; + pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; + pairing_info_in.header.buffer_len = + WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; + + pairing_info_in.port.integrated_port_type = data->port_type; + pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; + pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, + HDCP_2_2_E_KH_KM_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, + sizeof(pairing_info_in), + (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); + 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", + WIRED_AKE_SEND_PAIRING_INFO, + pairing_info_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data) +{ + struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; + struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !lc_init_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + lc_init_in.header.api_version = HDCP_API_VERSION; + lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; + lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; + + lc_init_in.port.integrated_port_type = data->port_type; + lc_init_in.port.physical_port = (u8)data->hdcp_ddi; + lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); + return -EIO; + } + + lc_init_data->msg_id = HDCP_2_2_LC_INIT; + memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime) +{ + struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; + struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_lprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_lprime_in.header.api_version = HDCP_API_VERSION; + verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; + verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_lprime_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; + + verify_lprime_in.port.integrated_port_type = data->port_type; + verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; + verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, + HDCP_2_2_L_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, + sizeof(verify_lprime_in), + (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); + 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", + WIRED_VALIDATE_LOCALITY, + verify_lprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data) +{ + struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; + struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ske_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + get_skey_in.header.api_version = HDCP_API_VERSION; + get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; + get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; + get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; + + get_skey_in.port.integrated_port_type = data->port_type; + get_skey_in.port.physical_port = (u8)data->hdcp_ddi; + get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_GET_SESSION_KEY, get_skey_out.header.status); + return -EIO; + } + + ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; + memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, + HDCP_2_2_E_DKEY_KS_LEN); + memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); + + return 0; +} + +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack) +{ + struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; + struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !rep_topology || !rep_send_ack || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_repeater_in.header.api_version = HDCP_API_VERSION; + verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; + verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_repeater_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; + + verify_repeater_in.port.integrated_port_type = data->port_type; + verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; + verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, + HDCP_2_2_RXINFO_LEN); + memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, + HDCP_2_2_SEQ_NUM_LEN); + memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, + HDCP_2_2_V_PRIME_HALF_LEN); + memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, + HDCP_2_2_RECEIVER_IDS_MAX_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, + sizeof(verify_repeater_in), + (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); + 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", + WIRED_VERIFY_REPEATER, + verify_repeater_out.header.status); + return -EIO; + } + + memcpy(rep_send_ack->v, verify_repeater_out.v, + HDCP_2_2_V_PRIME_HALF_LEN); + rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; + + return 0; +} + +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready) +{ + struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; + struct wired_cmd_repeater_auth_stream_req_out + verify_mprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + size_t cmd_size; + + if (!dev || !stream_ready || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + cmd_size = struct_size(verify_mprime_in, streams, data->k); + if (cmd_size == SIZE_MAX) + return -EINVAL; + + verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); + if (!verify_mprime_in) + return -ENOMEM; + + verify_mprime_in->header.api_version = HDCP_API_VERSION; + verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; + verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; + verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); + + verify_mprime_in->port.integrated_port_type = data->port_type; + verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; + verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); + drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); + + memcpy(verify_mprime_in->streams, data->streams, + array_size(data->k, sizeof(*data->streams))); + + verify_mprime_in->k = cpu_to_be16(data->k); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, + (u8 *)&verify_mprime_out, + 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); + 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", + WIRED_REPEATER_AUTH_STREAM_REQ, + verify_mprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data) +{ + struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; + struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + enable_auth_in.header.api_version = HDCP_API_VERSION; + enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; + enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; + enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; + + enable_auth_in.port.integrated_port_type = data->port_type; + enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; + enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + enable_auth_in.stream_type = data->streams[0].stream_type; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, + sizeof(enable_auth_in), + (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); + 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", + WIRED_ENABLE_AUTH, enable_auth_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data) +{ + struct wired_cmd_close_session_in session_close_in = { { 0 } }; + struct wired_cmd_close_session_out session_close_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_close_in.header.api_version = HDCP_API_VERSION; + session_close_in.header.command_id = WIRED_CLOSE_SESSION; + session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_close_in.header.buffer_len = + WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; + + session_close_in.port.integrated_port_type = data->port_type; + session_close_in.port.physical_port = (u8)data->hdcp_ddi; + session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, + sizeof(session_close_in), + (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); + return byte; + } + + if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { + drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", + session_close_out.header.status); + return -EIO; + } + + return 0; +} diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h new file mode 100644 index 000000000000..1096dd36823f --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023 Intel Corporation + */ + +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ +#define __INTEL_HDCP_GSC_MESSAGE_H__ + +#include <linux/err.h> +#include <linux/types.h> + +struct device; +struct drm_i915_private; +struct hdcp_port_data; +struct hdcp2_ake_init; +struct hdcp2_ake_send_cert; +struct hdcp2_ake_no_stored_km; +struct hdcp2_ake_send_hprime; +struct hdcp2_ake_send_pairing_info; +struct hdcp2_lc_init; +struct hdcp2_lc_send_lprime; +struct hdcp2_ske_send_eks; +struct hdcp2_rep_send_receiverid_list; +struct hdcp2_rep_send_ack; +struct hdcp2_rep_stream_ready; + +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); +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data); +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz); +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime); +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info); +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data); +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime); +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data); +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack); +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready); +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data); +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data); + +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH v3 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 10:38 ` [Intel-gfx] [PATCH v3 " Suraj Kandpal @ 2023-09-20 12:09 ` Jani Nikula 2023-09-20 15:57 ` Kandpal, Suraj 2023-09-21 5:38 ` [Intel-gfx] [PATCH v4 " Suraj Kandpal 1 sibling, 1 reply; 26+ messages in thread From: Jani Nikula @ 2023-09-20 12:09 UTC (permalink / raw) To: Suraj Kandpal, intel-gfx On Wed, 20 Sep 2023, Suraj Kandpal <suraj.kandpal@intel.com> wrote: > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > new file mode 100644 > index 000000000000..1096dd36823f > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > @@ -0,0 +1,73 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023 Intel Corporation > + */ > + > +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ > +#define __INTEL_HDCP_GSC_MESSAGE_H__ > + > +#include <linux/err.h> What does this header need from err.h? BR, Jani. > +#include <linux/types.h> > + > +struct device; > +struct drm_i915_private; > +struct hdcp_port_data; > +struct hdcp2_ake_init; > +struct hdcp2_ake_send_cert; > +struct hdcp2_ake_no_stored_km; > +struct hdcp2_ake_send_hprime; > +struct hdcp2_ake_send_pairing_info; > +struct hdcp2_lc_init; > +struct hdcp2_lc_send_lprime; > +struct hdcp2_ske_send_eks; > +struct hdcp2_rep_send_receiverid_list; > +struct hdcp2_rep_send_ack; > +struct hdcp2_rep_stream_ready; > + > +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); > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); > +int > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_init *ake_data); > +int > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ake_send_cert *rx_cert, > + bool *km_stored, > + struct hdcp2_ake_no_stored_km > + *ek_pub_km, > + size_t *msg_sz); > +int > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_hprime *rx_hprime); > +int > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_pairing_info *pairing_info); > +int > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_lc_init *lc_init_data); > +int > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_lc_send_lprime *rx_lprime); > +int intel_hdcp_gsc_get_session_key(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ske_send_eks *ske_data); > +int > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_send_receiverid_list > + *rep_topology, > + struct hdcp2_rep_send_ack > + *rep_send_ack); > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_stream_ready *stream_ready); > +int intel_hdcp_gsc_enable_authentication(struct device *dev, > + struct hdcp_port_data *data); > +int > +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data); > + > +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH v3 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 12:09 ` Jani Nikula @ 2023-09-20 15:57 ` Kandpal, Suraj 0 siblings, 0 replies; 26+ messages in thread From: Kandpal, Suraj @ 2023-09-20 15:57 UTC (permalink / raw) To: Nikula, Jani, intel-gfx@lists.freedesktop.org > Subject: Re: [PATCH v3 2/2] drm/i915/hdcp: Move common message filling > function to its own file > > On Wed, 20 Sep 2023, Suraj Kandpal <suraj.kandpal@intel.com> wrote: > > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > new file mode 100644 > > index 000000000000..1096dd36823f > > --- /dev/null > > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > @@ -0,0 +1,73 @@ > > +/* SPDX-License-Identifier: MIT */ > > +/* > > + * Copyright © 2023 Intel Corporation */ > > + > > +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ > > +#define __INTEL_HDCP_GSC_MESSAGE_H__ > > + > > +#include <linux/err.h> > > What does this header need from err.h? > Ahh right this can be moved to intel_hdcp_gsc_message.c I don’t know where my mind wanders off too :-[ Regards, Suraj Kandpal > BR, > Jani. > > > +#include <linux/types.h> > > + > > +struct device; > > +struct drm_i915_private; > > +struct hdcp_port_data; > > +struct hdcp2_ake_init; > > +struct hdcp2_ake_send_cert; > > +struct hdcp2_ake_no_stored_km; > > +struct hdcp2_ake_send_hprime; > > +struct hdcp2_ake_send_pairing_info; > > +struct hdcp2_lc_init; > > +struct hdcp2_lc_send_lprime; > > +struct hdcp2_ske_send_eks; > > +struct hdcp2_rep_send_receiverid_list; struct hdcp2_rep_send_ack; > > +struct hdcp2_rep_stream_ready; > > + > > +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); > > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); int > > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_ake_init *ake_data); int > > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_ake_send_cert > *rx_cert, > > + bool *km_stored, > > + struct hdcp2_ake_no_stored_km > > + *ek_pub_km, > > + size_t *msg_sz); > > +int > > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_ake_send_hprime *rx_hprime); int > > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct > hdcp_port_data *data, > > + struct hdcp2_ake_send_pairing_info > *pairing_info); int > > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_lc_init *lc_init_data); int > > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data > *data, > > + struct hdcp2_lc_send_lprime *rx_lprime); int > > +intel_hdcp_gsc_get_session_key(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_ske_send_eks *ske_data); int > > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > > + struct hdcp_port_data *data, > > + struct > hdcp2_rep_send_receiverid_list > > + *rep_topology, > > + struct hdcp2_rep_send_ack > > + *rep_send_ack); > > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > > + struct hdcp_port_data *data, > > + struct hdcp2_rep_stream_ready > *stream_ready); int > > +intel_hdcp_gsc_enable_authentication(struct device *dev, > > + struct hdcp_port_data *data); > > +int > > +intel_hdcp_gsc_close_session(struct device *dev, struct > > +hdcp_port_data *data); > > + > > +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ > > -- > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] [PATCH v4 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 10:38 ` [Intel-gfx] [PATCH v3 " Suraj Kandpal 2023-09-20 12:09 ` Jani Nikula @ 2023-09-21 5:38 ` Suraj Kandpal 2023-10-09 9:14 ` Shankar, Uma 1 sibling, 1 reply; 26+ messages in thread From: Suraj Kandpal @ 2023-09-21 5:38 UTC (permalink / raw) To: intel-gfx; +Cc: jani.nikula Create a new file intel_hdcp_gsc_message that contain functions which fill the hdcp messages we send to gsc cs this refactor will help us reuse code for Xe later on --v2 -add the missed file for proper build --v3 -use forward declarations instead of #includes [Jani] --v4 -move linux/err.h to intel_hdcp_gsc_message.c from intel_hdcp_gsc_message.h [Jani] Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 615 +----------------- .../drm/i915/display/intel_hdcp_gsc_message.c | 592 +++++++++++++++++ .../drm/i915/display/intel_hdcp_gsc_message.h | 72 ++ 4 files changed, 682 insertions(+), 598 deletions(-) create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index 1b2e02e9d92c..27b3da6e0e43 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -265,6 +265,7 @@ i915-y += \ display/intel_global_state.o \ display/intel_hdcp.o \ display/intel_hdcp_gsc.o \ + display/intel_hdcp_gsc_message.o \ display/intel_hotplug.o \ display/intel_hotplug_irq.o \ display/intel_hti.o \ diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c index d355d610bc9f..18117b789b16 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c @@ -11,6 +11,7 @@ #include "i915_drv.h" #include "i915_utils.h" #include "intel_hdcp_gsc.h" +#include "intel_hdcp_gsc_message.h" bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) { @@ -31,604 +32,6 @@ bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) return true; } -static int -gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_init *ake_data) -{ - struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; - struct wired_cmd_initiate_hdcp2_session_out - session_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ake_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_init_in.header.api_version = HDCP_API_VERSION; - session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; - session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_init_in.header.buffer_len = - WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; - - session_init_in.port.integrated_port_type = data->port_type; - session_init_in.port.physical_port = (u8)data->hdcp_ddi; - session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - session_init_in.protocol = data->protocol; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, - sizeof(session_init_in), - (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); - 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", - WIRED_INITIATE_HDCP2_SESSION, - session_init_out.header.status); - return -EIO; - } - - ake_data->msg_id = HDCP_2_2_AKE_INIT; - ake_data->tx_caps = session_init_out.tx_caps; - memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_receiver_cert_prepare_km(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ake_send_cert *rx_cert, - bool *km_stored, - struct hdcp2_ake_no_stored_km - *ek_pub_km, - size_t *msg_sz) -{ - struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; - struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_rxcert_in.header.api_version = HDCP_API_VERSION; - verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; - verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_rxcert_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; - - verify_rxcert_in.port.integrated_port_type = data->port_type; - verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; - verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - verify_rxcert_in.cert_rx = rx_cert->cert_rx; - memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); - memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, - sizeof(verify_rxcert_in), - (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); - 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", - WIRED_VERIFY_RECEIVER_CERT, - verify_rxcert_out.header.status); - return -EIO; - } - - *km_stored = !!verify_rxcert_out.km_stored; - if (verify_rxcert_out.km_stored) { - ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_stored_km); - } else { - ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; - *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); - } - - memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, - sizeof(verify_rxcert_out.ekm_buff)); - - return 0; -} - -static int -gsc_hdcp_verify_hprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_hprime *rx_hprime) -{ - struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; - struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_hprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - send_hprime_in.header.api_version = HDCP_API_VERSION; - send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; - send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; - - send_hprime_in.port.integrated_port_type = data->port_type; - send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; - send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, - HDCP_2_2_H_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, - sizeof(send_hprime_in), - (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); - 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", - WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_store_pairing_info(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_ake_send_pairing_info *pairing_info) -{ - struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; - struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !pairing_info) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - pairing_info_in.header.api_version = HDCP_API_VERSION; - pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; - pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; - pairing_info_in.header.buffer_len = - WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; - - pairing_info_in.port.integrated_port_type = data->port_type; - pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; - pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, - HDCP_2_2_E_KH_KM_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, - sizeof(pairing_info_in), - (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); - 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", - WIRED_AKE_SEND_PAIRING_INFO, - pairing_info_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_initiate_locality_check(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_lc_init *lc_init_data) -{ - struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; - struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !lc_init_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - lc_init_in.header.api_version = HDCP_API_VERSION; - lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; - lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; - lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; - - lc_init_in.port.integrated_port_type = data->port_type; - lc_init_in.port.physical_port = (u8)data->hdcp_ddi; - lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); - return -EIO; - } - - lc_init_data->msg_id = HDCP_2_2_LC_INIT; - memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); - - return 0; -} - -static int -gsc_hdcp_verify_lprime(struct device *dev, struct hdcp_port_data *data, - struct hdcp2_lc_send_lprime *rx_lprime) -{ - struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; - struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !rx_lprime) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_lprime_in.header.api_version = HDCP_API_VERSION; - verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; - verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_lprime_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; - - verify_lprime_in.port.integrated_port_type = data->port_type; - verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; - verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, - HDCP_2_2_L_PRIME_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, - sizeof(verify_lprime_in), - (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); - 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", - WIRED_VALIDATE_LOCALITY, - verify_lprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_get_session_key(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_ske_send_eks *ske_data) -{ - struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; - struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data || !ske_data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - get_skey_in.header.api_version = HDCP_API_VERSION; - get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; - get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; - get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; - - get_skey_in.port.integrated_port_type = data->port_type; - get_skey_in.port.physical_port = (u8)data->hdcp_ddi; - get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - 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); - 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", - WIRED_GET_SESSION_KEY, get_skey_out.header.status); - return -EIO; - } - - ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; - memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, - HDCP_2_2_E_DKEY_KS_LEN); - memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); - - return 0; -} - -static int -gsc_hdcp_repeater_check_flow_prepare_ack(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_send_receiverid_list - *rep_topology, - struct hdcp2_rep_send_ack - *rep_send_ack) -{ - struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; - struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !rep_topology || !rep_send_ack || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - verify_repeater_in.header.api_version = HDCP_API_VERSION; - verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; - verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; - verify_repeater_in.header.buffer_len = - WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; - - verify_repeater_in.port.integrated_port_type = data->port_type; - verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; - verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, - HDCP_2_2_RXINFO_LEN); - memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, - HDCP_2_2_SEQ_NUM_LEN); - memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, - HDCP_2_2_V_PRIME_HALF_LEN); - memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, - HDCP_2_2_RECEIVER_IDS_MAX_LEN); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, - sizeof(verify_repeater_in), - (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); - 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", - WIRED_VERIFY_REPEATER, - verify_repeater_out.header.status); - return -EIO; - } - - memcpy(rep_send_ack->v, verify_repeater_out.v, - HDCP_2_2_V_PRIME_HALF_LEN); - rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; - - return 0; -} - -static int gsc_hdcp_verify_mprime(struct device *dev, - struct hdcp_port_data *data, - struct hdcp2_rep_stream_ready *stream_ready) -{ - struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; - struct wired_cmd_repeater_auth_stream_req_out - verify_mprime_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - size_t cmd_size; - - if (!dev || !stream_ready || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - cmd_size = struct_size(verify_mprime_in, streams, data->k); - if (cmd_size == SIZE_MAX) - return -EINVAL; - - verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); - if (!verify_mprime_in) - return -ENOMEM; - - verify_mprime_in->header.api_version = HDCP_API_VERSION; - verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; - verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; - verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); - - verify_mprime_in->port.integrated_port_type = data->port_type; - verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; - verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; - - memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); - drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); - - memcpy(verify_mprime_in->streams, data->streams, - array_size(data->k, sizeof(*data->streams))); - - verify_mprime_in->k = cpu_to_be16(data->k); - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, - (u8 *)&verify_mprime_out, - 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); - 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", - WIRED_REPEATER_AUTH_STREAM_REQ, - verify_mprime_out.header.status); - return -EIO; - } - - return 0; -} - -static int gsc_hdcp_enable_authentication(struct device *dev, - struct hdcp_port_data *data) -{ - struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; - struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - enable_auth_in.header.api_version = HDCP_API_VERSION; - enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; - enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; - enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; - - enable_auth_in.port.integrated_port_type = data->port_type; - enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; - enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - enable_auth_in.stream_type = data->streams[0].stream_type; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, - sizeof(enable_auth_in), - (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); - 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", - WIRED_ENABLE_AUTH, enable_auth_out.header.status); - return -EIO; - } - - return 0; -} - -static int -gsc_hdcp_close_session(struct device *dev, struct hdcp_port_data *data) -{ - struct wired_cmd_close_session_in session_close_in = { { 0 } }; - struct wired_cmd_close_session_out session_close_out = { { 0 } }; - struct drm_i915_private *i915; - ssize_t byte; - - if (!dev || !data) - return -EINVAL; - - i915 = kdev_to_i915(dev); - if (!i915) { - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); - return -ENODEV; - } - - session_close_in.header.api_version = HDCP_API_VERSION; - session_close_in.header.command_id = WIRED_CLOSE_SESSION; - session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; - session_close_in.header.buffer_len = - WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; - - session_close_in.port.integrated_port_type = data->port_type; - session_close_in.port.physical_port = (u8)data->hdcp_ddi; - session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; - - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, - sizeof(session_close_in), - (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); - return byte; - } - - if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { - drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", - session_close_out.header.status); - return -EIO; - } - - return 0; -} - -static const struct i915_hdcp_ops gsc_hdcp_ops = { - .initiate_hdcp2_session = gsc_hdcp_initiate_session, - .verify_receiver_cert_prepare_km = - gsc_hdcp_verify_receiver_cert_prepare_km, - .verify_hprime = gsc_hdcp_verify_hprime, - .store_pairing_info = gsc_hdcp_store_pairing_info, - .initiate_locality_check = gsc_hdcp_initiate_locality_check, - .verify_lprime = gsc_hdcp_verify_lprime, - .get_session_key = gsc_hdcp_get_session_key, - .repeater_check_flow_prepare_ack = - gsc_hdcp_repeater_check_flow_prepare_ack, - .verify_mprime = gsc_hdcp_verify_mprime, - .enable_hdcp_authentication = gsc_hdcp_enable_authentication, - .close_hdcp_session = gsc_hdcp_close_session, -}; - /*This function helps allocate memory for the command that we will send to gsc cs */ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, struct intel_hdcp_gsc_message *hdcp_message) @@ -681,6 +84,22 @@ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, return err; } +static const struct i915_hdcp_ops gsc_hdcp_ops = { + .initiate_hdcp2_session = intel_hdcp_gsc_initiate_session, + .verify_receiver_cert_prepare_km = + intel_hdcp_gsc_verify_receiver_cert_prepare_km, + .verify_hprime = intel_hdcp_gsc_verify_hprime, + .store_pairing_info = intel_hdcp_gsc_store_pairing_info, + .initiate_locality_check = intel_hdcp_gsc_initiate_locality_check, + .verify_lprime = intel_hdcp_gsc_verify_lprime, + .get_session_key = intel_hdcp_gsc_get_session_key, + .repeater_check_flow_prepare_ack = + intel_hdcp_gsc_repeater_check_flow_prepare_ack, + .verify_mprime = intel_hdcp_gsc_verify_mprime, + .enable_hdcp_authentication = intel_hdcp_gsc_enable_authentication, + .close_hdcp_session = intel_hdcp_gsc_close_session, +}; + static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) { struct intel_hdcp_gsc_message *hdcp_message; diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c new file mode 100644 index 000000000000..3938ace3ad60 --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c @@ -0,0 +1,592 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright 2023, Intel Corporation. + */ + +#include <drm/i915_hdcp_interface.h> +#include <linux/err.h> + +#include "i915_drv.h" +#include "intel_hdcp_gsc_message.h" + +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data) +{ + struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; + struct wired_cmd_initiate_hdcp2_session_out + session_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ake_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_init_in.header.api_version = HDCP_API_VERSION; + session_init_in.header.command_id = WIRED_INITIATE_HDCP2_SESSION; + session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_init_in.header.buffer_len = + WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; + + session_init_in.port.integrated_port_type = data->port_type; + session_init_in.port.physical_port = (u8)data->hdcp_ddi; + session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + session_init_in.protocol = data->protocol; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, + sizeof(session_init_in), + (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); + 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", + WIRED_INITIATE_HDCP2_SESSION, + session_init_out.header.status); + return -EIO; + } + + ake_data->msg_id = HDCP_2_2_AKE_INIT; + ake_data->tx_caps = session_init_out.tx_caps; + memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz) +{ + struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; + struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_rxcert_in.header.api_version = HDCP_API_VERSION; + verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; + verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_rxcert_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; + + verify_rxcert_in.port.integrated_port_type = data->port_type; + verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; + verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + verify_rxcert_in.cert_rx = rx_cert->cert_rx; + memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); + memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, HDCP_2_2_RXCAPS_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, + sizeof(verify_rxcert_in), + (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); + 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", + WIRED_VERIFY_RECEIVER_CERT, + verify_rxcert_out.header.status); + return -EIO; + } + + *km_stored = !!verify_rxcert_out.km_stored; + if (verify_rxcert_out.km_stored) { + ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_stored_km); + } else { + ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; + *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); + } + + memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, + sizeof(verify_rxcert_out.ekm_buff)); + + return 0; +} + +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime) +{ + struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; + struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_hprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + send_hprime_in.header.api_version = HDCP_API_VERSION; + send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; + send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; + + send_hprime_in.port.integrated_port_type = data->port_type; + send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; + send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, + HDCP_2_2_H_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, + sizeof(send_hprime_in), + (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); + 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", + WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info) +{ + struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; + struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !pairing_info) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + pairing_info_in.header.api_version = HDCP_API_VERSION; + pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO; + pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; + pairing_info_in.header.buffer_len = + WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; + + pairing_info_in.port.integrated_port_type = data->port_type; + pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; + pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, + HDCP_2_2_E_KH_KM_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, + sizeof(pairing_info_in), + (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); + 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", + WIRED_AKE_SEND_PAIRING_INFO, + pairing_info_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data) +{ + struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; + struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !lc_init_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + lc_init_in.header.api_version = HDCP_API_VERSION; + lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; + lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; + lc_init_in.header.buffer_len = WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; + + lc_init_in.port.integrated_port_type = data->port_type; + lc_init_in.port.physical_port = (u8)data->hdcp_ddi; + lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_INIT_LOCALITY_CHECK, lc_init_out.header.status); + return -EIO; + } + + lc_init_data->msg_id = HDCP_2_2_LC_INIT; + memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); + + return 0; +} + +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime) +{ + struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; + struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !rx_lprime) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_lprime_in.header.api_version = HDCP_API_VERSION; + verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; + verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_lprime_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; + + verify_lprime_in.port.integrated_port_type = data->port_type; + verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; + verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, + HDCP_2_2_L_PRIME_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, + sizeof(verify_lprime_in), + (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); + 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", + WIRED_VALIDATE_LOCALITY, + verify_lprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data) +{ + struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; + struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data || !ske_data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + get_skey_in.header.api_version = HDCP_API_VERSION; + get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; + get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; + get_skey_in.header.buffer_len = WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; + + get_skey_in.port.integrated_port_type = data->port_type; + get_skey_in.port.physical_port = (u8)data->hdcp_ddi; + get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + 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); + 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", + WIRED_GET_SESSION_KEY, get_skey_out.header.status); + return -EIO; + } + + ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; + memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, + HDCP_2_2_E_DKEY_KS_LEN); + memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); + + return 0; +} + +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack) +{ + struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; + struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !rep_topology || !rep_send_ack || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + verify_repeater_in.header.api_version = HDCP_API_VERSION; + verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; + verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; + verify_repeater_in.header.buffer_len = + WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; + + verify_repeater_in.port.integrated_port_type = data->port_type; + verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; + verify_repeater_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, + HDCP_2_2_RXINFO_LEN); + memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, + HDCP_2_2_SEQ_NUM_LEN); + memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, + HDCP_2_2_V_PRIME_HALF_LEN); + memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, + HDCP_2_2_RECEIVER_IDS_MAX_LEN); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, + sizeof(verify_repeater_in), + (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); + 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", + WIRED_VERIFY_REPEATER, + verify_repeater_out.header.status); + return -EIO; + } + + memcpy(rep_send_ack->v, verify_repeater_out.v, + HDCP_2_2_V_PRIME_HALF_LEN); + rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; + + return 0; +} + +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready) +{ + struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; + struct wired_cmd_repeater_auth_stream_req_out + verify_mprime_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + size_t cmd_size; + + if (!dev || !stream_ready || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + cmd_size = struct_size(verify_mprime_in, streams, data->k); + if (cmd_size == SIZE_MAX) + return -EINVAL; + + verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); + if (!verify_mprime_in) + return -ENOMEM; + + verify_mprime_in->header.api_version = HDCP_API_VERSION; + verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; + verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; + verify_mprime_in->header.buffer_len = cmd_size - sizeof(verify_mprime_in->header); + + verify_mprime_in->port.integrated_port_type = data->port_type; + verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; + verify_mprime_in->port.attached_transcoder = (u8)data->hdcp_transcoder; + + memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); + drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); + + memcpy(verify_mprime_in->streams, data->streams, + array_size(data->k, sizeof(*data->streams))); + + verify_mprime_in->k = cpu_to_be16(data->k); + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, cmd_size, + (u8 *)&verify_mprime_out, + 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); + 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", + WIRED_REPEATER_AUTH_STREAM_REQ, + verify_mprime_out.header.status); + return -EIO; + } + + return 0; +} + +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data) +{ + struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; + struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + enable_auth_in.header.api_version = HDCP_API_VERSION; + enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; + enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; + enable_auth_in.header.buffer_len = WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; + + enable_auth_in.port.integrated_port_type = data->port_type; + enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; + enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + enable_auth_in.stream_type = data->streams[0].stream_type; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, + sizeof(enable_auth_in), + (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); + 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", + WIRED_ENABLE_AUTH, enable_auth_out.header.status); + return -EIO; + } + + return 0; +} + +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data) +{ + struct wired_cmd_close_session_in session_close_in = { { 0 } }; + struct wired_cmd_close_session_out session_close_out = { { 0 } }; + struct drm_i915_private *i915; + ssize_t byte; + + if (!dev || !data) + return -EINVAL; + + i915 = kdev_to_i915(dev); + if (!i915) { + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); + return -ENODEV; + } + + session_close_in.header.api_version = HDCP_API_VERSION; + session_close_in.header.command_id = WIRED_CLOSE_SESSION; + session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; + session_close_in.header.buffer_len = + WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; + + session_close_in.port.integrated_port_type = data->port_type; + session_close_in.port.physical_port = (u8)data->hdcp_ddi; + session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; + + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, + sizeof(session_close_in), + (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); + return byte; + } + + if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { + drm_dbg_kms(&i915->drm, "Session Close Failed. status: 0x%X\n", + session_close_out.header.status); + return -EIO; + } + + return 0; +} diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h new file mode 100644 index 000000000000..ce199d6f6232 --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h @@ -0,0 +1,72 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023 Intel Corporation + */ + +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ +#define __INTEL_HDCP_GSC_MESSAGE_H__ + +#include <linux/types.h> + +struct device; +struct drm_i915_private; +struct hdcp_port_data; +struct hdcp2_ake_init; +struct hdcp2_ake_send_cert; +struct hdcp2_ake_no_stored_km; +struct hdcp2_ake_send_hprime; +struct hdcp2_ake_send_pairing_info; +struct hdcp2_lc_init; +struct hdcp2_lc_send_lprime; +struct hdcp2_ske_send_eks; +struct hdcp2_rep_send_receiverid_list; +struct hdcp2_rep_send_ack; +struct hdcp2_rep_stream_ready; + +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); +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); +int +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_init *ake_data); +int +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ake_send_cert *rx_cert, + bool *km_stored, + struct hdcp2_ake_no_stored_km + *ek_pub_km, + size_t *msg_sz); +int +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_hprime *rx_hprime); +int +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_ake_send_pairing_info *pairing_info); +int +intel_hdcp_gsc_initiate_locality_check(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_lc_init *lc_init_data); +int +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, + struct hdcp2_lc_send_lprime *rx_lprime); +int intel_hdcp_gsc_get_session_key(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_ske_send_eks *ske_data); +int +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_send_receiverid_list + *rep_topology, + struct hdcp2_rep_send_ack + *rep_send_ack); +int intel_hdcp_gsc_verify_mprime(struct device *dev, + struct hdcp_port_data *data, + struct hdcp2_rep_stream_ready *stream_ready); +int intel_hdcp_gsc_enable_authentication(struct device *dev, + struct hdcp_port_data *data); +int +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data *data); + +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH v4 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-21 5:38 ` [Intel-gfx] [PATCH v4 " Suraj Kandpal @ 2023-10-09 9:14 ` Shankar, Uma 0 siblings, 0 replies; 26+ messages in thread From: Shankar, Uma @ 2023-10-09 9:14 UTC (permalink / raw) To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org; +Cc: Nikula, Jani > -----Original Message----- > From: Kandpal, Suraj <suraj.kandpal@intel.com> > Sent: Thursday, September 21, 2023 11:08 AM > To: intel-gfx@lists.freedesktop.org > Cc: Shankar, Uma <uma.shankar@intel.com>; Nikula, Jani > <jani.nikula@intel.com>; Kandpal, Suraj <suraj.kandpal@intel.com> > Subject: [PATCH v4 2/2] drm/i915/hdcp: Move common message filling function > to its own file > > Create a new file intel_hdcp_gsc_message that contain functions which fill the > hdcp messages we send to gsc cs this refactor will help us reuse code for Xe later > on > > --v2 > -add the missed file for proper build > > --v3 > -use forward declarations instead of #includes [Jani] > > --v4 > -move linux/err.h to intel_hdcp_gsc_message.c from intel_hdcp_gsc_message.h > [Jani] > > Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> > --- > drivers/gpu/drm/i915/Makefile | 1 + > drivers/gpu/drm/i915/display/intel_hdcp_gsc.c | 615 +----------------- > .../drm/i915/display/intel_hdcp_gsc_message.c | 592 +++++++++++++++++ > .../drm/i915/display/intel_hdcp_gsc_message.h | 72 ++ > 4 files changed, 682 insertions(+), 598 deletions(-) create mode 100644 > drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > create mode 100644 drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index 1b2e02e9d92c..27b3da6e0e43 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -265,6 +265,7 @@ i915-y += \ > display/intel_global_state.o \ > display/intel_hdcp.o \ > display/intel_hdcp_gsc.o \ > + display/intel_hdcp_gsc_message.o \ > display/intel_hotplug.o \ > display/intel_hotplug_irq.o \ > display/intel_hti.o \ > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > index d355d610bc9f..18117b789b16 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > @@ -11,6 +11,7 @@ > #include "i915_drv.h" > #include "i915_utils.h" > #include "intel_hdcp_gsc.h" > +#include "intel_hdcp_gsc_message.h" > > bool intel_hdcp_gsc_cs_required(struct drm_i915_private *i915) { @@ -31,604 > +32,6 @@ bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915) > return true; > } > > -static int > -gsc_hdcp_initiate_session(struct device *dev, struct hdcp_port_data *data, > - struct hdcp2_ake_init *ake_data) > -{ > - struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; > - struct wired_cmd_initiate_hdcp2_session_out > - session_init_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !ake_data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - session_init_in.header.api_version = HDCP_API_VERSION; > - session_init_in.header.command_id = > WIRED_INITIATE_HDCP2_SESSION; > - session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; > - session_init_in.header.buffer_len = > - > WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; > - > - session_init_in.port.integrated_port_type = data->port_type; > - session_init_in.port.physical_port = (u8)data->hdcp_ddi; > - session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - session_init_in.protocol = data->protocol; > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, > - sizeof(session_init_in), > - (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); > - 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", > - WIRED_INITIATE_HDCP2_SESSION, > - session_init_out.header.status); > - return -EIO; > - } > - > - ake_data->msg_id = HDCP_2_2_AKE_INIT; > - ake_data->tx_caps = session_init_out.tx_caps; > - memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); > - > - return 0; > -} > - > -static int > -gsc_hdcp_verify_receiver_cert_prepare_km(struct device *dev, > - struct hdcp_port_data *data, > - struct hdcp2_ake_send_cert *rx_cert, > - bool *km_stored, > - struct hdcp2_ake_no_stored_km > - *ek_pub_km, > - size_t *msg_sz) > -{ > - struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; > - struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - verify_rxcert_in.header.api_version = HDCP_API_VERSION; > - verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; > - verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; > - verify_rxcert_in.header.buffer_len = > - > WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; > - > - verify_rxcert_in.port.integrated_port_type = data->port_type; > - verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; > - verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - verify_rxcert_in.cert_rx = rx_cert->cert_rx; > - memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); > - memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, > HDCP_2_2_RXCAPS_LEN); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, > - sizeof(verify_rxcert_in), > - (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); > - 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", > - WIRED_VERIFY_RECEIVER_CERT, > - verify_rxcert_out.header.status); > - return -EIO; > - } > - > - *km_stored = !!verify_rxcert_out.km_stored; > - if (verify_rxcert_out.km_stored) { > - ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; > - *msg_sz = sizeof(struct hdcp2_ake_stored_km); > - } else { > - ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; > - *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); > - } > - > - memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, > - sizeof(verify_rxcert_out.ekm_buff)); > - > - return 0; > -} > - > -static int > -gsc_hdcp_verify_hprime(struct device *dev, struct hdcp_port_data *data, > - struct hdcp2_ake_send_hprime *rx_hprime) > -{ > - struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; > - struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !rx_hprime) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - send_hprime_in.header.api_version = HDCP_API_VERSION; > - send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; > - send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; > - send_hprime_in.header.buffer_len = > WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; > - > - send_hprime_in.port.integrated_port_type = data->port_type; > - send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; > - send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, > - HDCP_2_2_H_PRIME_LEN); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, > - sizeof(send_hprime_in), > - (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); > - 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", > - WIRED_AKE_SEND_HPRIME, > send_hprime_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static int > -gsc_hdcp_store_pairing_info(struct device *dev, struct hdcp_port_data *data, > - struct hdcp2_ake_send_pairing_info *pairing_info) > -{ > - struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; > - struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !pairing_info) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - pairing_info_in.header.api_version = HDCP_API_VERSION; > - pairing_info_in.header.command_id = > WIRED_AKE_SEND_PAIRING_INFO; > - pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; > - pairing_info_in.header.buffer_len = > - > WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; > - > - pairing_info_in.port.integrated_port_type = data->port_type; > - pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; > - pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, > - HDCP_2_2_E_KH_KM_LEN); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, > - sizeof(pairing_info_in), > - (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); > - 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", > - WIRED_AKE_SEND_PAIRING_INFO, > - pairing_info_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static int > -gsc_hdcp_initiate_locality_check(struct device *dev, > - struct hdcp_port_data *data, > - struct hdcp2_lc_init *lc_init_data) > -{ > - struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; > - struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !lc_init_data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - lc_init_in.header.api_version = HDCP_API_VERSION; > - lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; > - lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; > - lc_init_in.header.buffer_len = > WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; > - > - lc_init_in.port.integrated_port_type = data->port_type; > - lc_init_in.port.physical_port = (u8)data->hdcp_ddi; > - lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - 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); > - 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", > - WIRED_INIT_LOCALITY_CHECK, > lc_init_out.header.status); > - return -EIO; > - } > - > - lc_init_data->msg_id = HDCP_2_2_LC_INIT; > - memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); > - > - return 0; > -} > - > -static int > -gsc_hdcp_verify_lprime(struct device *dev, struct hdcp_port_data *data, > - struct hdcp2_lc_send_lprime *rx_lprime) > -{ > - struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; > - struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !rx_lprime) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - verify_lprime_in.header.api_version = HDCP_API_VERSION; > - verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; > - verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; > - verify_lprime_in.header.buffer_len = > - > WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; > - > - verify_lprime_in.port.integrated_port_type = data->port_type; > - verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; > - verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, > - HDCP_2_2_L_PRIME_LEN); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, > - sizeof(verify_lprime_in), > - (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); > - 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", > - WIRED_VALIDATE_LOCALITY, > - verify_lprime_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static int gsc_hdcp_get_session_key(struct device *dev, > - struct hdcp_port_data *data, > - struct hdcp2_ske_send_eks *ske_data) > -{ > - struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; > - struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data || !ske_data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - get_skey_in.header.api_version = HDCP_API_VERSION; > - get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; > - get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; > - get_skey_in.header.buffer_len = > WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; > - > - get_skey_in.port.integrated_port_type = data->port_type; > - get_skey_in.port.physical_port = (u8)data->hdcp_ddi; > - get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - 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); > - 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", > - WIRED_GET_SESSION_KEY, > get_skey_out.header.status); > - return -EIO; > - } > - > - ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; > - memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, > - HDCP_2_2_E_DKEY_KS_LEN); > - memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); > - > - return 0; > -} > - > -static int > -gsc_hdcp_repeater_check_flow_prepare_ack(struct device *dev, > - struct hdcp_port_data *data, > - struct hdcp2_rep_send_receiverid_list > - *rep_topology, > - struct hdcp2_rep_send_ack > - *rep_send_ack) > -{ > - struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; > - struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !rep_topology || !rep_send_ack || !data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - verify_repeater_in.header.api_version = HDCP_API_VERSION; > - verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; > - verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; > - verify_repeater_in.header.buffer_len = > - > WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; > - > - verify_repeater_in.port.integrated_port_type = data->port_type; > - verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; > - verify_repeater_in.port.attached_transcoder = (u8)data- > >hdcp_transcoder; > - > - memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, > - HDCP_2_2_RXINFO_LEN); > - memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, > - HDCP_2_2_SEQ_NUM_LEN); > - memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, > - HDCP_2_2_V_PRIME_HALF_LEN); > - memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, > - HDCP_2_2_RECEIVER_IDS_MAX_LEN); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, > - sizeof(verify_repeater_in), > - (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); > - 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", > - WIRED_VERIFY_REPEATER, > - verify_repeater_out.header.status); > - return -EIO; > - } > - > - memcpy(rep_send_ack->v, verify_repeater_out.v, > - HDCP_2_2_V_PRIME_HALF_LEN); > - rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; > - > - return 0; > -} > - > -static int gsc_hdcp_verify_mprime(struct device *dev, > - struct hdcp_port_data *data, > - struct hdcp2_rep_stream_ready > *stream_ready) > -{ > - struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; > - struct wired_cmd_repeater_auth_stream_req_out > - verify_mprime_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - size_t cmd_size; > - > - if (!dev || !stream_ready || !data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - cmd_size = struct_size(verify_mprime_in, streams, data->k); > - if (cmd_size == SIZE_MAX) > - return -EINVAL; > - > - verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); > - if (!verify_mprime_in) > - return -ENOMEM; > - > - verify_mprime_in->header.api_version = HDCP_API_VERSION; > - verify_mprime_in->header.command_id = > WIRED_REPEATER_AUTH_STREAM_REQ; > - verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; > - verify_mprime_in->header.buffer_len = cmd_size - > sizeof(verify_mprime_in->header); > - > - verify_mprime_in->port.integrated_port_type = data->port_type; > - verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; > - verify_mprime_in->port.attached_transcoder = (u8)data- > >hdcp_transcoder; > - > - memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, > HDCP_2_2_MPRIME_LEN); > - drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data- > >seq_num_m); > - > - memcpy(verify_mprime_in->streams, data->streams, > - array_size(data->k, sizeof(*data->streams))); > - > - verify_mprime_in->k = cpu_to_be16(data->k); > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, > cmd_size, > - (u8 *)&verify_mprime_out, > - 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); > - 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", > - WIRED_REPEATER_AUTH_STREAM_REQ, > - verify_mprime_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static int gsc_hdcp_enable_authentication(struct device *dev, > - struct hdcp_port_data *data) > -{ > - struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; > - struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - enable_auth_in.header.api_version = HDCP_API_VERSION; > - enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; > - enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; > - enable_auth_in.header.buffer_len = > WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; > - > - enable_auth_in.port.integrated_port_type = data->port_type; > - enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; > - enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - enable_auth_in.stream_type = data->streams[0].stream_type; > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, > - sizeof(enable_auth_in), > - (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); > - 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", > - WIRED_ENABLE_AUTH, > enable_auth_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static int > -gsc_hdcp_close_session(struct device *dev, struct hdcp_port_data *data) -{ > - struct wired_cmd_close_session_in session_close_in = { { 0 } }; > - struct wired_cmd_close_session_out session_close_out = { { 0 } }; > - struct drm_i915_private *i915; > - ssize_t byte; > - > - if (!dev || !data) > - return -EINVAL; > - > - i915 = kdev_to_i915(dev); > - if (!i915) { > - dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > - return -ENODEV; > - } > - > - session_close_in.header.api_version = HDCP_API_VERSION; > - session_close_in.header.command_id = WIRED_CLOSE_SESSION; > - session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; > - session_close_in.header.buffer_len = > - WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; > - > - session_close_in.port.integrated_port_type = data->port_type; > - session_close_in.port.physical_port = (u8)data->hdcp_ddi; > - session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > - > - byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, > - sizeof(session_close_in), > - (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); > - return byte; > - } > - > - if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { > - drm_dbg_kms(&i915->drm, "Session Close Failed. status: > 0x%X\n", > - session_close_out.header.status); > - return -EIO; > - } > - > - return 0; > -} > - > -static const struct i915_hdcp_ops gsc_hdcp_ops = { > - .initiate_hdcp2_session = gsc_hdcp_initiate_session, > - .verify_receiver_cert_prepare_km = > - gsc_hdcp_verify_receiver_cert_prepare_km, > - .verify_hprime = gsc_hdcp_verify_hprime, > - .store_pairing_info = gsc_hdcp_store_pairing_info, > - .initiate_locality_check = gsc_hdcp_initiate_locality_check, > - .verify_lprime = gsc_hdcp_verify_lprime, > - .get_session_key = gsc_hdcp_get_session_key, > - .repeater_check_flow_prepare_ack = > - gsc_hdcp_repeater_check_flow_prepare_ack, > - .verify_mprime = gsc_hdcp_verify_mprime, > - .enable_hdcp_authentication = gsc_hdcp_enable_authentication, > - .close_hdcp_session = gsc_hdcp_close_session, > -}; > - > /*This function helps allocate memory for the command that we will send to gsc > cs */ static int intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, > struct intel_hdcp_gsc_message > *hdcp_message) @@ -681,6 +84,22 @@ static int > intel_hdcp_gsc_initialize_message(struct drm_i915_private *i915, > return err; > } > > +static const struct i915_hdcp_ops gsc_hdcp_ops = { > + .initiate_hdcp2_session = intel_hdcp_gsc_initiate_session, > + .verify_receiver_cert_prepare_km = > + > intel_hdcp_gsc_verify_receiver_cert_prepare_km, > + .verify_hprime = intel_hdcp_gsc_verify_hprime, > + .store_pairing_info = intel_hdcp_gsc_store_pairing_info, > + .initiate_locality_check = intel_hdcp_gsc_initiate_locality_check, > + .verify_lprime = intel_hdcp_gsc_verify_lprime, > + .get_session_key = intel_hdcp_gsc_get_session_key, > + .repeater_check_flow_prepare_ack = > + > intel_hdcp_gsc_repeater_check_flow_prepare_ack, > + .verify_mprime = intel_hdcp_gsc_verify_mprime, > + .enable_hdcp_authentication = intel_hdcp_gsc_enable_authentication, > + .close_hdcp_session = intel_hdcp_gsc_close_session, }; > + > static int intel_hdcp_gsc_hdcp2_init(struct drm_i915_private *i915) { > struct intel_hdcp_gsc_message *hdcp_message; diff --git > a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > new file mode 100644 > index 000000000000..3938ace3ad60 > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c > @@ -0,0 +1,592 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright 2023, Intel Corporation. > + */ > + > +#include <drm/i915_hdcp_interface.h> > +#include <linux/err.h> Move the linux include above the drm include. With this fixed, rest all look good to me: Reviewed-by: Uma Shankar <uma.shankar@intel.com> > +#include "i915_drv.h" > +#include "intel_hdcp_gsc_message.h" > + > +int > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data > *data, > + struct hdcp2_ake_init *ake_data) > +{ > + struct wired_cmd_initiate_hdcp2_session_in session_init_in = { { 0 } }; > + struct wired_cmd_initiate_hdcp2_session_out > + session_init_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !ake_data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + session_init_in.header.api_version = HDCP_API_VERSION; > + session_init_in.header.command_id = > WIRED_INITIATE_HDCP2_SESSION; > + session_init_in.header.status = FW_HDCP_STATUS_SUCCESS; > + session_init_in.header.buffer_len = > + > WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN; > + > + session_init_in.port.integrated_port_type = data->port_type; > + session_init_in.port.physical_port = (u8)data->hdcp_ddi; > + session_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + session_init_in.protocol = data->protocol; > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_init_in, > + sizeof(session_init_in), > + (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); > + 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", > + WIRED_INITIATE_HDCP2_SESSION, > + session_init_out.header.status); > + return -EIO; > + } > + > + ake_data->msg_id = HDCP_2_2_AKE_INIT; > + ake_data->tx_caps = session_init_out.tx_caps; > + memcpy(ake_data->r_tx, session_init_out.r_tx, HDCP_2_2_RTX_LEN); > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ake_send_cert > *rx_cert, > + bool *km_stored, > + struct hdcp2_ake_no_stored_km > + *ek_pub_km, > + size_t *msg_sz) > +{ > + struct wired_cmd_verify_receiver_cert_in verify_rxcert_in = { { 0 } }; > + struct wired_cmd_verify_receiver_cert_out verify_rxcert_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !rx_cert || !km_stored || !ek_pub_km || !msg_sz) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + verify_rxcert_in.header.api_version = HDCP_API_VERSION; > + verify_rxcert_in.header.command_id = WIRED_VERIFY_RECEIVER_CERT; > + verify_rxcert_in.header.status = FW_HDCP_STATUS_SUCCESS; > + verify_rxcert_in.header.buffer_len = > + > WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN; > + > + verify_rxcert_in.port.integrated_port_type = data->port_type; > + verify_rxcert_in.port.physical_port = (u8)data->hdcp_ddi; > + verify_rxcert_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + verify_rxcert_in.cert_rx = rx_cert->cert_rx; > + memcpy(verify_rxcert_in.r_rx, &rx_cert->r_rx, HDCP_2_2_RRX_LEN); > + memcpy(verify_rxcert_in.rx_caps, rx_cert->rx_caps, > +HDCP_2_2_RXCAPS_LEN); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_rxcert_in, > + sizeof(verify_rxcert_in), > + (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); > + 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", > + WIRED_VERIFY_RECEIVER_CERT, > + verify_rxcert_out.header.status); > + return -EIO; > + } > + > + *km_stored = !!verify_rxcert_out.km_stored; > + if (verify_rxcert_out.km_stored) { > + ek_pub_km->msg_id = HDCP_2_2_AKE_STORED_KM; > + *msg_sz = sizeof(struct hdcp2_ake_stored_km); > + } else { > + ek_pub_km->msg_id = HDCP_2_2_AKE_NO_STORED_KM; > + *msg_sz = sizeof(struct hdcp2_ake_no_stored_km); > + } > + > + memcpy(ek_pub_km->e_kpub_km, &verify_rxcert_out.ekm_buff, > + sizeof(verify_rxcert_out.ekm_buff)); > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_hprime *rx_hprime) { > + struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } }; > + struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !rx_hprime) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + send_hprime_in.header.api_version = HDCP_API_VERSION; > + send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME; > + send_hprime_in.header.status = FW_HDCP_STATUS_SUCCESS; > + send_hprime_in.header.buffer_len = > +WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN; > + > + send_hprime_in.port.integrated_port_type = data->port_type; > + send_hprime_in.port.physical_port = (u8)data->hdcp_ddi; > + send_hprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + memcpy(send_hprime_in.h_prime, rx_hprime->h_prime, > + HDCP_2_2_H_PRIME_LEN); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&send_hprime_in, > + sizeof(send_hprime_in), > + (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); > + 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", > + WIRED_AKE_SEND_HPRIME, > send_hprime_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data > *data, > + struct hdcp2_ake_send_pairing_info > *pairing_info) { > + struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } }; > + struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !pairing_info) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + pairing_info_in.header.api_version = HDCP_API_VERSION; > + pairing_info_in.header.command_id = > WIRED_AKE_SEND_PAIRING_INFO; > + pairing_info_in.header.status = FW_HDCP_STATUS_SUCCESS; > + pairing_info_in.header.buffer_len = > + > WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN; > + > + pairing_info_in.port.integrated_port_type = data->port_type; > + pairing_info_in.port.physical_port = (u8)data->hdcp_ddi; > + pairing_info_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km, > + HDCP_2_2_E_KH_KM_LEN); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&pairing_info_in, > + sizeof(pairing_info_in), > + (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); > + 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", > + WIRED_AKE_SEND_PAIRING_INFO, > + pairing_info_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_lc_init *lc_init_data) { > + struct wired_cmd_init_locality_check_in lc_init_in = { { 0 } }; > + struct wired_cmd_init_locality_check_out lc_init_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !lc_init_data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + lc_init_in.header.api_version = HDCP_API_VERSION; > + lc_init_in.header.command_id = WIRED_INIT_LOCALITY_CHECK; > + lc_init_in.header.status = FW_HDCP_STATUS_SUCCESS; > + lc_init_in.header.buffer_len = > +WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN; > + > + lc_init_in.port.integrated_port_type = data->port_type; > + lc_init_in.port.physical_port = (u8)data->hdcp_ddi; > + lc_init_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + 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); > + 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", > + WIRED_INIT_LOCALITY_CHECK, > lc_init_out.header.status); > + return -EIO; > + } > + > + lc_init_data->msg_id = HDCP_2_2_LC_INIT; > + memcpy(lc_init_data->r_n, lc_init_out.r_n, HDCP_2_2_RN_LEN); > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_lc_send_lprime *rx_lprime) { > + struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } }; > + struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !rx_lprime) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + verify_lprime_in.header.api_version = HDCP_API_VERSION; > + verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY; > + verify_lprime_in.header.status = FW_HDCP_STATUS_SUCCESS; > + verify_lprime_in.header.buffer_len = > + > WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN; > + > + verify_lprime_in.port.integrated_port_type = data->port_type; > + verify_lprime_in.port.physical_port = (u8)data->hdcp_ddi; > + verify_lprime_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime, > + HDCP_2_2_L_PRIME_LEN); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_lprime_in, > + sizeof(verify_lprime_in), > + (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); > + 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", > + WIRED_VALIDATE_LOCALITY, > + verify_lprime_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > + > +int intel_hdcp_gsc_get_session_key(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ske_send_eks *ske_data) { > + struct wired_cmd_get_session_key_in get_skey_in = { { 0 } }; > + struct wired_cmd_get_session_key_out get_skey_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data || !ske_data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + get_skey_in.header.api_version = HDCP_API_VERSION; > + get_skey_in.header.command_id = WIRED_GET_SESSION_KEY; > + get_skey_in.header.status = FW_HDCP_STATUS_SUCCESS; > + get_skey_in.header.buffer_len = > WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN; > + > + get_skey_in.port.integrated_port_type = data->port_type; > + get_skey_in.port.physical_port = (u8)data->hdcp_ddi; > + get_skey_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + 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); > + 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", > + WIRED_GET_SESSION_KEY, > get_skey_out.header.status); > + return -EIO; > + } > + > + ske_data->msg_id = HDCP_2_2_SKE_SEND_EKS; > + memcpy(ske_data->e_dkey_ks, get_skey_out.e_dkey_ks, > + HDCP_2_2_E_DKEY_KS_LEN); > + memcpy(ske_data->riv, get_skey_out.r_iv, HDCP_2_2_RIV_LEN); > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > + struct hdcp_port_data *data, > + struct > hdcp2_rep_send_receiverid_list > + *rep_topology, > + struct hdcp2_rep_send_ack > + *rep_send_ack) > +{ > + struct wired_cmd_verify_repeater_in verify_repeater_in = { { 0 } }; > + struct wired_cmd_verify_repeater_out verify_repeater_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !rep_topology || !rep_send_ack || !data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + verify_repeater_in.header.api_version = HDCP_API_VERSION; > + verify_repeater_in.header.command_id = WIRED_VERIFY_REPEATER; > + verify_repeater_in.header.status = FW_HDCP_STATUS_SUCCESS; > + verify_repeater_in.header.buffer_len = > + > WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN; > + > + verify_repeater_in.port.integrated_port_type = data->port_type; > + verify_repeater_in.port.physical_port = (u8)data->hdcp_ddi; > + verify_repeater_in.port.attached_transcoder = > +(u8)data->hdcp_transcoder; > + > + memcpy(verify_repeater_in.rx_info, rep_topology->rx_info, > + HDCP_2_2_RXINFO_LEN); > + memcpy(verify_repeater_in.seq_num_v, rep_topology->seq_num_v, > + HDCP_2_2_SEQ_NUM_LEN); > + memcpy(verify_repeater_in.v_prime, rep_topology->v_prime, > + HDCP_2_2_V_PRIME_HALF_LEN); > + memcpy(verify_repeater_in.receiver_ids, rep_topology->receiver_ids, > + HDCP_2_2_RECEIVER_IDS_MAX_LEN); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&verify_repeater_in, > + sizeof(verify_repeater_in), > + (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); > + 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", > + WIRED_VERIFY_REPEATER, > + verify_repeater_out.header.status); > + return -EIO; > + } > + > + memcpy(rep_send_ack->v, verify_repeater_out.v, > + HDCP_2_2_V_PRIME_HALF_LEN); > + rep_send_ack->msg_id = HDCP_2_2_REP_SEND_ACK; > + > + return 0; > +} > + > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_stream_ready > *stream_ready) { > + struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; > + struct wired_cmd_repeater_auth_stream_req_out > + verify_mprime_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + size_t cmd_size; > + > + if (!dev || !stream_ready || !data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + cmd_size = struct_size(verify_mprime_in, streams, data->k); > + if (cmd_size == SIZE_MAX) > + return -EINVAL; > + > + verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); > + if (!verify_mprime_in) > + return -ENOMEM; > + > + verify_mprime_in->header.api_version = HDCP_API_VERSION; > + verify_mprime_in->header.command_id = > WIRED_REPEATER_AUTH_STREAM_REQ; > + verify_mprime_in->header.status = FW_HDCP_STATUS_SUCCESS; > + verify_mprime_in->header.buffer_len = cmd_size - > +sizeof(verify_mprime_in->header); > + > + verify_mprime_in->port.integrated_port_type = data->port_type; > + verify_mprime_in->port.physical_port = (u8)data->hdcp_ddi; > + verify_mprime_in->port.attached_transcoder = > +(u8)data->hdcp_transcoder; > + > + memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, > HDCP_2_2_MPRIME_LEN); > + drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data- > >seq_num_m); > + > + memcpy(verify_mprime_in->streams, data->streams, > + array_size(data->k, sizeof(*data->streams))); > + > + verify_mprime_in->k = cpu_to_be16(data->k); > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)verify_mprime_in, > cmd_size, > + (u8 *)&verify_mprime_out, > + 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); > + 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", > + WIRED_REPEATER_AUTH_STREAM_REQ, > + verify_mprime_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > + > +int intel_hdcp_gsc_enable_authentication(struct device *dev, > + struct hdcp_port_data *data) > +{ > + struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } }; > + struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + enable_auth_in.header.api_version = HDCP_API_VERSION; > + enable_auth_in.header.command_id = WIRED_ENABLE_AUTH; > + enable_auth_in.header.status = FW_HDCP_STATUS_SUCCESS; > + enable_auth_in.header.buffer_len = > WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN; > + > + enable_auth_in.port.integrated_port_type = data->port_type; > + enable_auth_in.port.physical_port = (u8)data->hdcp_ddi; > + enable_auth_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + enable_auth_in.stream_type = data->streams[0].stream_type; > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&enable_auth_in, > + sizeof(enable_auth_in), > + (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); > + 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", > + WIRED_ENABLE_AUTH, > enable_auth_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > + > +int > +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data > +*data) { > + struct wired_cmd_close_session_in session_close_in = { { 0 } }; > + struct wired_cmd_close_session_out session_close_out = { { 0 } }; > + struct drm_i915_private *i915; > + ssize_t byte; > + > + if (!dev || !data) > + return -EINVAL; > + > + i915 = kdev_to_i915(dev); > + if (!i915) { > + dev_err(dev, "DRM not initialized, aborting HDCP.\n"); > + return -ENODEV; > + } > + > + session_close_in.header.api_version = HDCP_API_VERSION; > + session_close_in.header.command_id = WIRED_CLOSE_SESSION; > + session_close_in.header.status = FW_HDCP_STATUS_SUCCESS; > + session_close_in.header.buffer_len = > + WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN; > + > + session_close_in.port.integrated_port_type = data->port_type; > + session_close_in.port.physical_port = (u8)data->hdcp_ddi; > + session_close_in.port.attached_transcoder = (u8)data->hdcp_transcoder; > + > + byte = intel_hdcp_gsc_msg_send(i915, (u8 *)&session_close_in, > + sizeof(session_close_in), > + (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); > + return byte; > + } > + > + if (session_close_out.header.status != FW_HDCP_STATUS_SUCCESS) { > + drm_dbg_kms(&i915->drm, "Session Close Failed. status: > 0x%X\n", > + session_close_out.header.status); > + return -EIO; > + } > + > + return 0; > +} > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > new file mode 100644 > index 000000000000..ce199d6f6232 > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h > @@ -0,0 +1,72 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023 Intel Corporation > + */ > + > +#ifndef __INTEL_HDCP_GSC_MESSAGE_H__ > +#define __INTEL_HDCP_GSC_MESSAGE_H__ > + > +#include <linux/types.h> > + > +struct device; > +struct drm_i915_private; > +struct hdcp_port_data; > +struct hdcp2_ake_init; > +struct hdcp2_ake_send_cert; > +struct hdcp2_ake_no_stored_km; > +struct hdcp2_ake_send_hprime; > +struct hdcp2_ake_send_pairing_info; > +struct hdcp2_lc_init; > +struct hdcp2_lc_send_lprime; > +struct hdcp2_ske_send_eks; > +struct hdcp2_rep_send_receiverid_list; > +struct hdcp2_rep_send_ack; > +struct hdcp2_rep_stream_ready; > + > +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); > +bool intel_hdcp_gsc_check_status(struct drm_i915_private *i915); int > +intel_hdcp_gsc_initiate_session(struct device *dev, struct hdcp_port_data > *data, > + struct hdcp2_ake_init *ake_data); > +int > +intel_hdcp_gsc_verify_receiver_cert_prepare_km(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ake_send_cert > *rx_cert, > + bool *km_stored, > + struct hdcp2_ake_no_stored_km > + *ek_pub_km, > + size_t *msg_sz); > +int > +intel_hdcp_gsc_verify_hprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_ake_send_hprime *rx_hprime); int > +intel_hdcp_gsc_store_pairing_info(struct device *dev, struct hdcp_port_data > *data, > + struct hdcp2_ake_send_pairing_info > *pairing_info); int > +intel_hdcp_gsc_initiate_locality_check(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_lc_init *lc_init_data); int > +intel_hdcp_gsc_verify_lprime(struct device *dev, struct hdcp_port_data *data, > + struct hdcp2_lc_send_lprime *rx_lprime); int > +intel_hdcp_gsc_get_session_key(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_ske_send_eks *ske_data); int > +intel_hdcp_gsc_repeater_check_flow_prepare_ack(struct device *dev, > + struct hdcp_port_data *data, > + struct > hdcp2_rep_send_receiverid_list > + *rep_topology, > + struct hdcp2_rep_send_ack > + *rep_send_ack); > +int intel_hdcp_gsc_verify_mprime(struct device *dev, > + struct hdcp_port_data *data, > + struct hdcp2_rep_stream_ready > *stream_ready); int > +intel_hdcp_gsc_enable_authentication(struct device *dev, > + struct hdcp_port_data *data); > +int > +intel_hdcp_gsc_close_session(struct device *dev, struct hdcp_port_data > +*data); > + > +#endif /* __INTEL_HDCP_GSC_MESSAGE_H__ */ > -- > 2.25.1 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal 2023-09-20 8:46 ` kernel test robot 2023-09-20 8:50 ` Suraj Kandpal @ 2023-09-20 9:30 ` kernel test robot 2023-09-21 15:32 ` kernel test robot 3 siblings, 0 replies; 26+ messages in thread From: kernel test robot @ 2023-09-20 9:30 UTC (permalink / raw) To: Suraj Kandpal, intel-gfx; +Cc: jani.nikula, oe-kbuild-all Hi Suraj, kernel test robot noticed the following build errors: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-i915-hdcp-Move-checks-for-gsc-health-status/20230920-143839 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230920063611.242942-3-suraj.kandpal%40intel.com patch subject: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file config: i386-buildonly-randconfig-002-20230920 (https://download.01.org/0day-ci/archive/20230920/202309201747.5tql4Gr4-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/202309201747.5tql4Gr4-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309201747.5tql4Gr4-lkp@intel.com/ All errors (new ones prefixed by >>): >> make[7]: *** No rule to make target 'drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o', needed by 'drivers/gpu/drm/i915/i915.o'. make[7]: *** [scripts/Makefile.build:243: drivers/gpu/drm/i915/display/intel_hdcp_gsc.o] Error 1 shuffle=1704323870 make[7]: Target 'drivers/gpu/drm/i915/' not remade because of errors. -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal ` (2 preceding siblings ...) 2023-09-20 9:30 ` [Intel-gfx] [PATCH " kernel test robot @ 2023-09-21 15:32 ` kernel test robot 3 siblings, 0 replies; 26+ messages in thread From: kernel test robot @ 2023-09-21 15:32 UTC (permalink / raw) To: Suraj Kandpal, intel-gfx; +Cc: jani.nikula, llvm, oe-kbuild-all Hi Suraj, kernel test robot noticed the following build errors: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-i915-hdcp-Move-checks-for-gsc-health-status/20230921-174353 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230920063611.242942-3-suraj.kandpal%40intel.com patch subject: [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20230921/202309212348.71aApJ0M-lkp@intel.com/config) compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230921/202309212348.71aApJ0M-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309212348.71aApJ0M-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/gpu/drm/i915/display/intel_hdcp_gsc.c:11:10: fatal error: 'intel_hdcp_gsc_message.h' file not found #include "intel_hdcp_gsc_message.h" ^~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. vim +11 drivers/gpu/drm/i915/display/intel_hdcp_gsc.c > 11 #include "intel_hdcp_gsc_message.h" 12 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BUILD: failure for Refactor i915 HDCP for XE 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal 2023-09-20 6:36 ` [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status Suraj Kandpal 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal @ 2023-09-20 7:05 ` Patchwork 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev2) Patchwork ` (9 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 7:05 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE URL : https://patchwork.freedesktop.org/series/123955/ State : failure == Summary == Error: make failed CALL scripts/checksyscalls.sh DESCEND objtool INSTALL libsubcmd_headers CC [M] drivers/gpu/drm/i915/display/intel_hdcp_gsc.o drivers/gpu/drm/i915/display/intel_hdcp_gsc.c:11:10: fatal error: intel_hdcp_gsc_message.h: No such file or directory 11 | #include "intel_hdcp_gsc_message.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[6]: *** [scripts/Makefile.build:243: drivers/gpu/drm/i915/display/intel_hdcp_gsc.o] Error 1 make[5]: *** [scripts/Makefile.build:480: drivers/gpu/drm/i915] Error 2 make[4]: *** [scripts/Makefile.build:480: drivers/gpu/drm] Error 2 make[3]: *** [scripts/Makefile.build:480: drivers/gpu] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[1]: *** [/home/kbuild/kernel/Makefile:1913: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2 Build failed, no error log produced ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev2) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (2 preceding siblings ...) 2023-09-20 7:05 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Refactor i915 HDCP for XE Patchwork @ 2023-09-20 9:28 ` Patchwork 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork ` (8 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 9:28 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev2) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim checkpatch failed 86d0a82a07c2 drm/i915/hdcp: Move checks for gsc health status c896414f7fe9 drm/i915/hdcp: Move common message filling function to its own file Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' -:690: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #690: new file mode 100644 total: 0 errors, 1 warnings, 0 checks, 1300 lines checked ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Refactor i915 HDCP for XE (rev2) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (3 preceding siblings ...) 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev2) Patchwork @ 2023-09-20 9:28 ` Patchwork 2023-09-20 9:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork ` (7 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 9:28 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev2) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return' ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for Refactor i915 HDCP for XE (rev2) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (4 preceding siblings ...) 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork @ 2023-09-20 9:46 ` Patchwork 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev3) Patchwork ` (6 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 9:46 UTC (permalink / raw) To: Kandpal, Suraj; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 4327 bytes --] == Series Details == Series: Refactor i915 HDCP for XE (rev2) URL : https://patchwork.freedesktop.org/series/123955/ State : success == Summary == CI Bug Log - changes from CI_DRM_13653 -> Patchwork_123955v2 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/index.html Participating hosts (38 -> 37) ------------------------------ Additional (1): fi-hsw-4770 Missing (2): fi-kbl-soraka fi-snb-2520m Known issues ------------ Here are the changes found in Patchwork_123955v2 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_suspend@basic-s0@lmem0: - bat-dg2-9: [PASS][1] -> [INCOMPLETE][2] ([i915#9275]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13653/bat-dg2-9/igt@gem_exec_suspend@basic-s0@lmem0.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/bat-dg2-9/igt@gem_exec_suspend@basic-s0@lmem0.html * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy: - fi-hsw-4770: NOTRUN -> [SKIP][3] ([fdo#109271]) +13 other tests skip [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html * igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1: - bat-rplp-1: [PASS][4] -> [ABORT][5] ([i915#8668]) [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13653/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1: - fi-hsw-4770: NOTRUN -> [DMESG-WARN][6] ([i915#8841]) +6 other tests dmesg-warn [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/fi-hsw-4770/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1.html * igt@kms_psr@sprite_plane_onoff: - fi-hsw-4770: NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#1072]) +3 other tests skip [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/fi-hsw-4770/igt@kms_psr@sprite_plane_onoff.html #### Possible fixes #### * igt@kms_chamelium_edid@hdmi-edid-read: - {bat-dg2-13}: [DMESG-WARN][8] ([i915#7952]) -> [PASS][9] [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13653/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html * igt@kms_chamelium_frames@dp-crc-fast: - {bat-dg2-13}: [DMESG-WARN][10] ([Intel XE#485]) -> [PASS][11] [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13653/bat-dg2-13/igt@kms_chamelium_frames@dp-crc-fast.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/bat-dg2-13/igt@kms_chamelium_frames@dp-crc-fast.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [Intel XE#485]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/485 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#7952]: https://gitlab.freedesktop.org/drm/intel/issues/7952 [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668 [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841 [i915#9275]: https://gitlab.freedesktop.org/drm/intel/issues/9275 Build changes ------------- * Linux: CI_DRM_13653 -> Patchwork_123955v2 CI-20190529: 20190529 CI_DRM_13653: 56d487b04d902a227f8bc5cc93b73a71f7c06a12 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7493: 2517e42d612e0c1ca096acf8b5f6177f7ef4bce7 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_123955v2: 56d487b04d902a227f8bc5cc93b73a71f7c06a12 @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits a9e9532713c5 drm/i915/hdcp: Move common message filling function to its own file bd9ed2a0b913 drm/i915/hdcp: Move checks for gsc health status == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v2/index.html [-- Attachment #2: Type: text/html, Size: 5186 bytes --] ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev3) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (5 preceding siblings ...) 2023-09-20 9:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork @ 2023-09-20 13:02 ` Patchwork 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork ` (5 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 13:02 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev3) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim checkpatch failed 004d02f4d754 drm/i915/hdcp: Move checks for gsc health status 39677cfad370 drm/i915/hdcp: Move common message filling function to its own file Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' -:672: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #672: new file mode 100644 total: 0 errors, 1 warnings, 0 checks, 1304 lines checked ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Refactor i915 HDCP for XE (rev3) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (6 preceding siblings ...) 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev3) Patchwork @ 2023-09-20 13:02 ` Patchwork 2023-09-20 13:16 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork ` (4 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 13:02 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev3) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return' ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for Refactor i915 HDCP for XE (rev3) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (7 preceding siblings ...) 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork @ 2023-09-20 13:16 ` Patchwork 2023-09-20 18:19 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork ` (3 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 13:16 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 5891 bytes --] == Series Details == Series: Refactor i915 HDCP for XE (rev3) URL : https://patchwork.freedesktop.org/series/123955/ State : success == Summary == CI Bug Log - changes from CI_DRM_13655 -> Patchwork_123955v3 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/index.html Participating hosts (38 -> 38) ------------------------------ Additional (1): fi-hsw-4770 Missing (1): fi-snb-2520m Known issues ------------ Here are the changes found in Patchwork_123955v3 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_module_load@load: - bat-adlp-6: [PASS][1] -> [DMESG-WARN][2] ([i915#1982] / [i915#8449]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/bat-adlp-6/igt@i915_module_load@load.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-adlp-6/igt@i915_module_load@load.html * igt@i915_selftest@live@requests: - bat-mtlp-8: [PASS][3] -> [ABORT][4] ([i915#9262]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/bat-mtlp-8/igt@i915_selftest@live@requests.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-mtlp-8/igt@i915_selftest@live@requests.html * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy: - fi-hsw-4770: NOTRUN -> [SKIP][5] ([fdo#109271]) +13 other tests skip [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html * igt@kms_frontbuffer_tracking@basic: - fi-bsw-nick: [PASS][6] -> [FAIL][7] ([i915#9276]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/fi-bsw-nick/igt@kms_frontbuffer_tracking@basic.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/fi-bsw-nick/igt@kms_frontbuffer_tracking@basic.html * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence: - bat-adlp-9: NOTRUN -> [SKIP][8] ([i915#3546]) +2 other tests skip [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-adlp-9/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html * igt@kms_pipe_crc_basic@read-crc-frame-sequence: - bat-dg2-11: NOTRUN -> [SKIP][9] ([i915#1845]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-dg2-11/igt@kms_pipe_crc_basic@read-crc-frame-sequence.html * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1: - fi-hsw-4770: NOTRUN -> [DMESG-WARN][10] ([i915#8841]) +6 other tests dmesg-warn [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/fi-hsw-4770/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1.html * igt@kms_psr@sprite_plane_onoff: - fi-hsw-4770: NOTRUN -> [SKIP][11] ([fdo#109271] / [i915#1072]) +3 other tests skip [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/fi-hsw-4770/igt@kms_psr@sprite_plane_onoff.html #### Possible fixes #### * igt@i915_selftest@live@migrate: - bat-dg2-11: [DMESG-FAIL][12] ([i915#7699] / [i915#7913]) -> [PASS][13] [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/bat-dg2-11/igt@i915_selftest@live@migrate.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-dg2-11/igt@i915_selftest@live@migrate.html * igt@kms_chamelium_edid@hdmi-edid-read: - {bat-dg2-13}: [DMESG-WARN][14] ([i915#7952]) -> [PASS][15] [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html * igt@kms_hdmi_inject@inject-audio: - fi-kbl-guc: [FAIL][16] ([IGT#3] / [i915#6121]) -> [PASS][17] [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [IGT#3]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/3 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546 [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121 [i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699 [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913 [i915#7952]: https://gitlab.freedesktop.org/drm/intel/issues/7952 [i915#8449]: https://gitlab.freedesktop.org/drm/intel/issues/8449 [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841 [i915#9262]: https://gitlab.freedesktop.org/drm/intel/issues/9262 [i915#9276]: https://gitlab.freedesktop.org/drm/intel/issues/9276 Build changes ------------- * Linux: CI_DRM_13655 -> Patchwork_123955v3 CI-20190529: 20190529 CI_DRM_13655: 2559821d8860b65cf30f69445af66287e6737f2f @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7493: 2517e42d612e0c1ca096acf8b5f6177f7ef4bce7 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_123955v3: 2559821d8860b65cf30f69445af66287e6737f2f @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits a5fd6ef6fd4a drm/i915/hdcp: Move common message filling function to its own file e73e0c7ef210 drm/i915/hdcp: Move checks for gsc health status == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/index.html [-- Attachment #2: Type: text/html, Size: 6850 bytes --] ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.IGT: failure for Refactor i915 HDCP for XE (rev3) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (8 preceding siblings ...) 2023-09-20 13:16 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork @ 2023-09-20 18:19 ` Patchwork 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev4) Patchwork ` (2 subsequent siblings) 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-20 18:19 UTC (permalink / raw) To: Kandpal, Suraj; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 59230 bytes --] == Series Details == Series: Refactor i915 HDCP for XE (rev3) URL : https://patchwork.freedesktop.org/series/123955/ State : failure == Summary == CI Bug Log - changes from CI_DRM_13655_full -> Patchwork_123955v3_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_123955v3_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_123955v3_full, please notify your bug team (lgci.bug.filing@intel.com) to allow them to document this new failure mode, which will reduce false positives in CI. Participating hosts (10 -> 10) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_123955v3_full: ### IGT changes ### #### Possible regressions #### * igt@kms_selftest@drm_format_helper: - shard-dg2: NOTRUN -> [TIMEOUT][1] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_selftest@drm_format_helper.html * igt@prime_busy@hang-wait@rcs0: - shard-tglu: [PASS][2] -> [INCOMPLETE][3] [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-tglu-6/igt@prime_busy@hang-wait@rcs0.html [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-5/igt@prime_busy@hang-wait@rcs0.html Known issues ------------ Here are the changes found in Patchwork_123955v3_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@api_intel_bb@blit-reloc-purge-cache: - shard-dg2: NOTRUN -> [SKIP][4] ([i915#8411]) [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@api_intel_bb@blit-reloc-purge-cache.html * igt@debugfs_test@basic-hwmon: - shard-tglu: NOTRUN -> [SKIP][5] ([i915#9318]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@debugfs_test@basic-hwmon.html * igt@drm_fdinfo@all-busy-check-all: - shard-dg2: NOTRUN -> [SKIP][6] ([i915#8414]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@drm_fdinfo@all-busy-check-all.html * igt@drm_fdinfo@busy-idle-check-all@ccs0: - shard-mtlp: NOTRUN -> [SKIP][7] ([i915#8414]) +11 other tests skip [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@drm_fdinfo@busy-idle-check-all@ccs0.html * igt@drm_fdinfo@most-busy-idle-check-all@rcs0: - shard-rkl: [PASS][8] -> [FAIL][9] ([i915#7742]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-rkl-7/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-6/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html * igt@gem_basic@multigpu-create-close: - shard-dg2: NOTRUN -> [SKIP][10] ([i915#7697]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_basic@multigpu-create-close.html * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0: - shard-dg2: [PASS][11] -> [INCOMPLETE][12] ([i915#7297]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-6/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-6/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html * igt@gem_ctx_isolation@preservation-s3@vcs0: - shard-mtlp: [PASS][13] -> [DMESG-WARN][14] ([i915#9262]) +2 other tests dmesg-warn [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-8/igt@gem_ctx_isolation@preservation-s3@vcs0.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-4/igt@gem_ctx_isolation@preservation-s3@vcs0.html * igt@gem_ctx_persistence@engines-persistence: - shard-snb: NOTRUN -> [SKIP][15] ([fdo#109271] / [i915#1099]) +2 other tests skip [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb6/igt@gem_ctx_persistence@engines-persistence.html * igt@gem_ctx_persistence@heartbeat-close: - shard-dg2: NOTRUN -> [SKIP][16] ([i915#8555]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_ctx_persistence@heartbeat-close.html * igt@gem_ctx_persistence@saturated-hostile-nopreempt@vcs1: - shard-mtlp: NOTRUN -> [SKIP][17] ([i915#5882]) +5 other tests skip [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_ctx_persistence@saturated-hostile-nopreempt@vcs1.html * igt@gem_ctx_sseu@invalid-args: - shard-mtlp: NOTRUN -> [SKIP][18] ([i915#280]) [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_ctx_sseu@invalid-args.html * igt@gem_eio@hibernate: - shard-dg2: NOTRUN -> [ABORT][19] ([i915#7975] / [i915#8213]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@gem_eio@hibernate.html * igt@gem_eio@in-flight-suspend: - shard-snb: NOTRUN -> [DMESG-WARN][20] ([i915#8841]) +2 other tests dmesg-warn [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb2/igt@gem_eio@in-flight-suspend.html * igt@gem_exec_balancer@hog: - shard-dg2: NOTRUN -> [SKIP][21] ([i915#4812]) [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_exec_balancer@hog.html * igt@gem_exec_capture@capture-recoverable: - shard-tglu: NOTRUN -> [SKIP][22] ([i915#6344]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@gem_exec_capture@capture-recoverable.html * igt@gem_exec_fair@basic-none-rrul: - shard-dg2: NOTRUN -> [SKIP][23] ([i915#3539] / [i915#4852]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_exec_fair@basic-none-rrul.html * igt@gem_exec_fair@basic-none-share@rcs0: - shard-glk: [PASS][24] -> [FAIL][25] ([i915#2842]) [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-glk5/igt@gem_exec_fair@basic-none-share@rcs0.html [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-glk3/igt@gem_exec_fair@basic-none-share@rcs0.html * igt@gem_exec_fair@basic-none-solo@rcs0: - shard-tglu: NOTRUN -> [FAIL][26] ([i915#2842]) [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@gem_exec_fair@basic-none-solo@rcs0.html * igt@gem_exec_fair@basic-pace-solo@rcs0: - shard-apl: [PASS][27] -> [FAIL][28] ([i915#2842]) [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-apl3/igt@gem_exec_fair@basic-pace-solo@rcs0.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl2/igt@gem_exec_fair@basic-pace-solo@rcs0.html * igt@gem_exec_reloc@basic-concurrent16: - shard-mtlp: NOTRUN -> [SKIP][29] ([i915#3281]) +1 other test skip [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_exec_reloc@basic-concurrent16.html * igt@gem_exec_reloc@basic-wc-cpu-active: - shard-dg2: NOTRUN -> [SKIP][30] ([i915#3281]) +1 other test skip [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@gem_exec_reloc@basic-wc-cpu-active.html * igt@gem_exec_schedule@independent@bcs0: - shard-mtlp: [PASS][31] -> [ABORT][32] ([i915#9262]) +1 other test abort [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-1/igt@gem_exec_schedule@independent@bcs0.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-8/igt@gem_exec_schedule@independent@bcs0.html * igt@gem_exec_suspend@basic-s4-devices@lmem0: - shard-dg1: [PASS][33] -> [ABORT][34] ([i915#7975] / [i915#8213]) [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-19/igt@gem_exec_suspend@basic-s4-devices@lmem0.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-14/igt@gem_exec_suspend@basic-s4-devices@lmem0.html * igt@gem_fence_thrash@bo-write-verify-none: - shard-dg2: NOTRUN -> [SKIP][35] ([i915#4860]) [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_fence_thrash@bo-write-verify-none.html * igt@gem_madvise@dontneed-before-exec: - shard-mtlp: NOTRUN -> [SKIP][36] ([i915#3282]) +2 other tests skip [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@gem_madvise@dontneed-before-exec.html * igt@gem_mmap_gtt@basic-small-bo-tiledx: - shard-mtlp: NOTRUN -> [SKIP][37] ([i915#4077]) +5 other tests skip [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@gem_mmap_gtt@basic-small-bo-tiledx.html * igt@gem_mmap_gtt@cpuset-medium-copy-xy: - shard-dg2: NOTRUN -> [SKIP][38] ([i915#4077]) +2 other tests skip [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_mmap_gtt@cpuset-medium-copy-xy.html * igt@gem_mmap_wc@write-prefaulted: - shard-mtlp: NOTRUN -> [SKIP][39] ([i915#4083]) [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_mmap_wc@write-prefaulted.html * igt@gem_partial_pwrite_pread@write-display: - shard-dg2: NOTRUN -> [SKIP][40] ([i915#3282]) +1 other test skip [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_partial_pwrite_pread@write-display.html * igt@gem_pxp@create-regular-context-2: - shard-tglu: NOTRUN -> [SKIP][41] ([i915#4270]) [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@gem_pxp@create-regular-context-2.html * igt@gem_pxp@reject-modify-context-protection-on: - shard-mtlp: NOTRUN -> [SKIP][42] ([i915#4270]) [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_pxp@reject-modify-context-protection-on.html * igt@gem_pxp@verify-pxp-execution-after-suspend-resume: - shard-dg2: NOTRUN -> [SKIP][43] ([i915#4270]) [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html * igt@gem_render_copy@y-tiled-to-vebox-linear: - shard-dg2: NOTRUN -> [SKIP][44] ([i915#5190]) +3 other tests skip [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_render_copy@y-tiled-to-vebox-linear.html * igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled: - shard-mtlp: NOTRUN -> [SKIP][45] ([i915#8428]) [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled.html * igt@gem_set_tiling_vs_blt@tiled-to-tiled: - shard-dg2: NOTRUN -> [SKIP][46] ([i915#4079]) [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_set_tiling_vs_blt@tiled-to-tiled.html * igt@gem_userptr_blits@mmap-offset-banned@gtt: - shard-mtlp: NOTRUN -> [SKIP][47] ([i915#3297]) [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@gem_userptr_blits@mmap-offset-banned@gtt.html * igt@gem_userptr_blits@unsync-overlap: - shard-dg2: NOTRUN -> [SKIP][48] ([i915#3297]) +2 other tests skip [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@gem_userptr_blits@unsync-overlap.html * igt@gen7_exec_parse@cmd-crossing-page: - shard-mtlp: NOTRUN -> [SKIP][49] ([fdo#109289]) [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@gen7_exec_parse@cmd-crossing-page.html * igt@gen9_exec_parse@batch-invalid-length: - shard-tglu: NOTRUN -> [SKIP][50] ([i915#2527] / [i915#2856]) [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@gen9_exec_parse@batch-invalid-length.html * igt@gen9_exec_parse@bb-secure: - shard-dg2: NOTRUN -> [SKIP][51] ([i915#2856]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@gen9_exec_parse@bb-secure.html * igt@gen9_exec_parse@unaligned-access: - shard-mtlp: NOTRUN -> [SKIP][52] ([i915#2856]) [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@gen9_exec_parse@unaligned-access.html * igt@i915_module_load@load: - shard-mtlp: NOTRUN -> [SKIP][53] ([i915#6227]) [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@i915_module_load@load.html * igt@i915_pm_rpm@dpms-non-lpsp: - shard-dg1: [PASS][54] -> [SKIP][55] ([i915#1397]) +2 other tests skip [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-17/igt@i915_pm_rpm@dpms-non-lpsp.html [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-19/igt@i915_pm_rpm@dpms-non-lpsp.html - shard-tglu: NOTRUN -> [SKIP][56] ([fdo#111644] / [i915#1397]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@i915_pm_rpm@dpms-non-lpsp.html * igt@i915_pm_rpm@modeset-lpsp-stress: - shard-dg2: NOTRUN -> [SKIP][57] ([i915#1397]) [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@i915_pm_rpm@modeset-lpsp-stress.html * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-dg2: [PASS][58] -> [SKIP][59] ([i915#1397]) +1 other test skip [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-1/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-10/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html * igt@i915_pm_rps@basic-api: - shard-dg2: NOTRUN -> [SKIP][60] ([i915#6621]) [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@i915_pm_rps@basic-api.html * igt@i915_pm_rps@reset: - shard-snb: [PASS][61] -> [INCOMPLETE][62] ([i915#7790]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-snb4/igt@i915_pm_rps@reset.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb4/igt@i915_pm_rps@reset.html * igt@i915_query@query-topology-unsupported: - shard-dg2: NOTRUN -> [SKIP][63] ([fdo#109302]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@i915_query@query-topology-unsupported.html * igt@i915_selftest@mock@memory_region: - shard-snb: NOTRUN -> [DMESG-WARN][64] ([i915#9312]) [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb2/igt@i915_selftest@mock@memory_region.html * igt@i915_suspend@basic-s3-without-i915: - shard-dg2: [PASS][65] -> [FAIL][66] ([fdo#103375]) [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-6/igt@i915_suspend@basic-s3-without-i915.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-5/igt@i915_suspend@basic-s3-without-i915.html * igt@i915_suspend@sysfs-reader: - shard-mtlp: NOTRUN -> [ABORT][67] ([i915#9262]) +1 other test abort [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-4/igt@i915_suspend@sysfs-reader.html * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy: - shard-mtlp: NOTRUN -> [SKIP][68] ([i915#4212]) +1 other test skip [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html * igt@kms_addfb_basic@basic-x-tiled-legacy: - shard-dg2: NOTRUN -> [SKIP][69] ([i915#4212]) [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_addfb_basic@basic-x-tiled-legacy.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-2-y-rc_ccs: - shard-rkl: NOTRUN -> [SKIP][70] ([i915#8502]) +3 other tests skip [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-6/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-2-y-rc_ccs.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-3-4-mc_ccs: - shard-dg2: NOTRUN -> [SKIP][71] ([i915#8502] / [i915#8709]) +11 other tests skip [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-3-4-mc_ccs.html * igt@kms_big_fb@4-tiled-16bpp-rotate-270: - shard-dg2: NOTRUN -> [SKIP][72] ([fdo#111614]) +1 other test skip [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip: - shard-tglu: NOTRUN -> [SKIP][73] ([fdo#111615] / [i915#5286]) +2 other tests skip [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html * igt@kms_big_fb@x-tiled-8bpp-rotate-90: - shard-mtlp: NOTRUN -> [SKIP][74] ([fdo#111614]) [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-4/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip: - shard-mtlp: NOTRUN -> [SKIP][75] ([fdo#111615]) +2 other tests skip [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html * igt@kms_big_fb@yf-tiled-8bpp-rotate-180: - shard-dg2: NOTRUN -> [SKIP][76] ([i915#4538] / [i915#5190]) [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_big_fb@yf-tiled-8bpp-rotate-180.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip: - shard-tglu: NOTRUN -> [SKIP][77] ([fdo#111615]) [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html * igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc: - shard-apl: NOTRUN -> [SKIP][78] ([fdo#109271] / [i915#3886]) +1 other test skip [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl1/igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-a-random-ccs-data-yf_tiled_ccs: - shard-mtlp: NOTRUN -> [SKIP][79] ([i915#6095]) +4 other tests skip [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@kms_ccs@pipe-a-random-ccs-data-yf_tiled_ccs.html * igt@kms_ccs@pipe-b-bad-pixel-format-y_tiled_gen12_mc_ccs: - shard-glk: NOTRUN -> [SKIP][80] ([fdo#109271] / [i915#3886]) [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-glk6/igt@kms_ccs@pipe-b-bad-pixel-format-y_tiled_gen12_mc_ccs.html * igt@kms_ccs@pipe-b-bad-rotation-90-4_tiled_dg2_rc_ccs: - shard-tglu: NOTRUN -> [SKIP][81] ([i915#3689] / [i915#5354] / [i915#6095]) +6 other tests skip [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_ccs@pipe-b-bad-rotation-90-4_tiled_dg2_rc_ccs.html * igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_mc_ccs: - shard-mtlp: NOTRUN -> [SKIP][82] ([i915#3886] / [i915#6095]) +1 other test skip [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_mc_ccs.html * igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_mtl_rc_ccs_cc: - shard-tglu: NOTRUN -> [SKIP][83] ([i915#5354] / [i915#6095]) [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-4_tiled_mtl_rc_ccs_cc.html * igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_ccs: - shard-glk: NOTRUN -> [SKIP][84] ([fdo#109271]) +20 other tests skip [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-glk6/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_ccs.html * igt@kms_ccs@pipe-c-missing-ccs-buffer-y_tiled_gen12_mc_ccs: - shard-dg2: NOTRUN -> [SKIP][85] ([i915#3689] / [i915#3886] / [i915#5354]) +2 other tests skip [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_ccs@pipe-c-missing-ccs-buffer-y_tiled_gen12_mc_ccs.html * igt@kms_ccs@pipe-d-crc-primary-basic-y_tiled_gen12_rc_ccs: - shard-dg2: NOTRUN -> [SKIP][86] ([i915#3689] / [i915#5354]) +6 other tests skip [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_ccs@pipe-d-crc-primary-basic-y_tiled_gen12_rc_ccs.html * igt@kms_ccs@pipe-d-missing-ccs-buffer-4_tiled_mtl_mc_ccs: - shard-dg2: NOTRUN -> [SKIP][87] ([i915#5354]) +15 other tests skip [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_ccs@pipe-d-missing-ccs-buffer-4_tiled_mtl_mc_ccs.html * igt@kms_cdclk@mode-transition-all-outputs: - shard-mtlp: NOTRUN -> [SKIP][88] ([i915#7213] / [i915#9010]) [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-8/igt@kms_cdclk@mode-transition-all-outputs.html * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3: - shard-dg2: NOTRUN -> [SKIP][89] ([i915#4087] / [i915#7213]) +3 other tests skip [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-6/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html * igt@kms_chamelium_color@gamma: - shard-dg2: NOTRUN -> [SKIP][90] ([fdo#111827]) +1 other test skip [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_chamelium_color@gamma.html * igt@kms_chamelium_edid@dp-edid-read: - shard-dg2: NOTRUN -> [SKIP][91] ([i915#7828]) +2 other tests skip [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_chamelium_edid@dp-edid-read.html * igt@kms_chamelium_frames@hdmi-crc-fast: - shard-mtlp: NOTRUN -> [SKIP][92] ([i915#7828]) +2 other tests skip [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@kms_chamelium_frames@hdmi-crc-fast.html * igt@kms_chamelium_hpd@dp-hpd-storm-disable: - shard-tglu: NOTRUN -> [SKIP][93] ([i915#7828]) +1 other test skip [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html * igt@kms_content_protection@atomic: - shard-dg2: NOTRUN -> [SKIP][94] ([i915#7118]) [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-1/igt@kms_content_protection@atomic.html * igt@kms_content_protection@srm@pipe-a-dp-4: - shard-dg2: NOTRUN -> [TIMEOUT][95] ([i915#7173]) [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_content_protection@srm@pipe-a-dp-4.html * igt@kms_cursor_crc@cursor-random-32x10: - shard-dg2: NOTRUN -> [SKIP][96] ([i915#3555]) +1 other test skip [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_cursor_crc@cursor-random-32x10.html * igt@kms_cursor_crc@cursor-random-512x512: - shard-dg2: NOTRUN -> [SKIP][97] ([i915#3359]) [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_cursor_crc@cursor-random-512x512.html * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic: - shard-dg2: NOTRUN -> [SKIP][98] ([fdo#109274] / [i915#5354]) [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html * igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic: - shard-mtlp: NOTRUN -> [SKIP][99] ([i915#3546]) +1 other test skip [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - shard-mtlp: NOTRUN -> [SKIP][100] ([i915#4213]) [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions: - shard-glk: [PASS][101] -> [FAIL][102] ([i915#2346]) [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][103] ([i915#3804]) [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-1/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html * igt@kms_dsc@dsc-with-bpc: - shard-dg2: NOTRUN -> [SKIP][104] ([i915#3555] / [i915#3840]) [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_dsc@dsc-with-bpc.html * igt@kms_dsc@dsc-with-formats: - shard-tglu: NOTRUN -> [SKIP][105] ([i915#3555] / [i915#3840]) [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_dsc@dsc-with-formats.html * igt@kms_flip@2x-absolute-wf_vblank: - shard-dg2: NOTRUN -> [SKIP][106] ([fdo#109274]) +2 other tests skip [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_flip@2x-absolute-wf_vblank.html * igt@kms_flip@2x-flip-vs-panning-interruptible: - shard-mtlp: NOTRUN -> [SKIP][107] ([i915#3637]) [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_flip@2x-flip-vs-panning-interruptible.html * igt@kms_flip@2x-flip-vs-rmfb-interruptible: - shard-snb: NOTRUN -> [SKIP][108] ([fdo#109271] / [fdo#111767]) [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb6/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html * igt@kms_flip@2x-flip-vs-wf_vblank-interruptible: - shard-tglu: NOTRUN -> [SKIP][109] ([fdo#109274] / [i915#3637]) [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html * igt@kms_flip@flip-vs-expired-vblank@c-dp1: - shard-apl: [PASS][110] -> [FAIL][111] ([i915#79]) [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-apl2/igt@kms_flip@flip-vs-expired-vblank@c-dp1.html [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl1/igt@kms_flip@flip-vs-expired-vblank@c-dp1.html * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][112] ([i915#2672]) +1 other test skip [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][113] ([i915#2672]) [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode.html * igt@kms_frontbuffer_tracking@fbc-2p-rte: - shard-snb: [PASS][114] -> [SKIP][115] ([fdo#109271]) [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-snb1/igt@kms_frontbuffer_tracking@fbc-2p-rte.html [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb5/igt@kms_frontbuffer_tracking@fbc-2p-rte.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-plflip-blt: - shard-mtlp: NOTRUN -> [SKIP][116] ([i915#1825]) +10 other tests skip [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-plflip-blt.html * igt@kms_frontbuffer_tracking@fbc-farfromfence-mmap-gtt: - shard-dg2: NOTRUN -> [SKIP][117] ([i915#8708]) +5 other tests skip [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-farfromfence-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff: - shard-tglu: NOTRUN -> [SKIP][118] ([fdo#110189]) +6 other tests skip [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt: - shard-tglu: NOTRUN -> [SKIP][119] ([fdo#109280]) +7 other tests skip [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-pwrite: - shard-dg2: NOTRUN -> [SKIP][120] ([i915#3458]) +5 other tests skip [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-mmap-gtt: - shard-mtlp: NOTRUN -> [SKIP][121] ([i915#8708]) +1 other test skip [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-mmap-gtt.html * igt@kms_hdr@bpc-switch: - shard-dg2: NOTRUN -> [SKIP][122] ([i915#3555] / [i915#8228]) +1 other test skip [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-1/igt@kms_hdr@bpc-switch.html * igt@kms_hdr@bpc-switch-dpms: - shard-tglu: NOTRUN -> [SKIP][123] ([i915#3555] / [i915#8228]) [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_hdr@bpc-switch-dpms.html * igt@kms_pipe_b_c_ivb@pipe-b-double-modeset-then-modeset-pipe-c: - shard-dg2: NOTRUN -> [SKIP][124] ([fdo#109289]) +1 other test skip [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_pipe_b_c_ivb@pipe-b-double-modeset-then-modeset-pipe-c.html * igt@kms_plane_lowres@tiling-x@pipe-c-edp-1: - shard-mtlp: NOTRUN -> [SKIP][125] ([i915#3582]) +3 other tests skip [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-4/igt@kms_plane_lowres@tiling-x@pipe-c-edp-1.html * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1: - shard-rkl: NOTRUN -> [FAIL][126] ([i915#8292]) [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-7/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1.html - shard-dg1: NOTRUN -> [FAIL][127] ([i915#8292]) [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-19/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1.html * igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-5@pipe-c-edp-1: - shard-mtlp: NOTRUN -> [SKIP][128] ([i915#5176]) +3 other tests skip [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-5@pipe-c-edp-1.html * igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-5@pipe-b-hdmi-a-1: - shard-dg1: NOTRUN -> [SKIP][129] ([i915#5176]) +23 other tests skip [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-19/igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-5@pipe-b-hdmi-a-1.html * igt@kms_plane_scaling@plane-upscale-with-rotation-factor-0-25@pipe-a-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][130] ([i915#5176]) +5 other tests skip [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-1/igt@kms_plane_scaling@plane-upscale-with-rotation-factor-0-25@pipe-a-hdmi-a-2.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][131] ([i915#5235]) +11 other tests skip [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-10/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-1.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-d-hdmi-a-3: - shard-dg1: NOTRUN -> [SKIP][132] ([i915#5235]) +15 other tests skip [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-13/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-d-hdmi-a-3.html * igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b-vga-1: - shard-snb: NOTRUN -> [SKIP][133] ([fdo#109271]) +183 other tests skip [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb2/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b-vga-1.html * igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25@pipe-d-edp-1: - shard-mtlp: NOTRUN -> [SKIP][134] ([i915#5235]) +3 other tests skip [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25@pipe-d-edp-1.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][135] ([i915#5235]) +5 other tests skip [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-1/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-2.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-c-dp-1: - shard-apl: NOTRUN -> [SKIP][136] ([fdo#109271]) +49 other tests skip [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl3/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-c-dp-1.html * igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf: - shard-dg2: NOTRUN -> [SKIP][137] ([i915#658]) +1 other test skip [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_psr2_sf@overlay-plane-move-continuous-exceed-sf.html * igt@kms_psr2_su@page_flip-xrgb8888: - shard-tglu: NOTRUN -> [SKIP][138] ([fdo#109642] / [fdo#111068] / [i915#658]) [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_psr2_su@page_flip-xrgb8888.html * igt@kms_psr@psr2_primary_render: - shard-dg2: NOTRUN -> [SKIP][139] ([i915#1072]) [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@kms_psr@psr2_primary_render.html * igt@kms_rotation_crc@sprite-rotation-270: - shard-rkl: [PASS][140] -> [INCOMPLETE][141] ([i915#8875]) [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-rkl-2/igt@kms_rotation_crc@sprite-rotation-270.html [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-7/igt@kms_rotation_crc@sprite-rotation-270.html * igt@kms_tiled_display@basic-test-pattern-with-chamelium: - shard-tglu: NOTRUN -> [SKIP][142] ([i915#8623]) [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html * igt@kms_universal_plane@cursor-fb-leak-pipe-b: - shard-snb: [PASS][143] -> [FAIL][144] ([i915#9196]) [143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-snb2/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-snb2/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html * igt@kms_vrr@flipline: - shard-tglu: NOTRUN -> [SKIP][145] ([i915#3555]) [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@kms_vrr@flipline.html * igt@kms_writeback@writeback-invalid-parameters: - shard-mtlp: NOTRUN -> [SKIP][146] ([i915#2437]) [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@kms_writeback@writeback-invalid-parameters.html * igt@perf@enable-disable@0-rcs0: - shard-dg2: NOTRUN -> [FAIL][147] ([i915#8724]) [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@perf@enable-disable@0-rcs0.html * igt@perf_pmu@busy-double-start@vcs1: - shard-dg1: [PASS][148] -> [FAIL][149] ([i915#4349]) [148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-18/igt@perf_pmu@busy-double-start@vcs1.html [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-16/igt@perf_pmu@busy-double-start@vcs1.html * igt@perf_pmu@busy-double-start@vecs1: - shard-dg2: [PASS][150] -> [FAIL][151] ([i915#4349]) +3 other tests fail [150]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-11/igt@perf_pmu@busy-double-start@vecs1.html [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-1/igt@perf_pmu@busy-double-start@vecs1.html * igt@perf_pmu@frequency@gt0: - shard-dg2: NOTRUN -> [FAIL][152] ([i915#6806]) [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@perf_pmu@frequency@gt0.html * igt@perf_pmu@most-busy-idle-check-all@vcs1: - shard-mtlp: NOTRUN -> [FAIL][153] ([i915#5234]) +5 other tests fail [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@perf_pmu@most-busy-idle-check-all@vcs1.html * igt@prime_udl: - shard-mtlp: NOTRUN -> [SKIP][154] ([fdo#109291]) [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@prime_udl.html * igt@prime_vgem@basic-gtt: - shard-dg2: NOTRUN -> [SKIP][155] ([i915#3708] / [i915#4077]) [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@prime_vgem@basic-gtt.html * igt@v3d/v3d_get_param@get-bad-flags: - shard-dg2: NOTRUN -> [SKIP][156] ([i915#2575]) +3 other tests skip [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@v3d/v3d_get_param@get-bad-flags.html * igt@v3d/v3d_mmap@mmap-bo: - shard-tglu: NOTRUN -> [SKIP][157] ([fdo#109315] / [i915#2575]) [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@v3d/v3d_mmap@mmap-bo.html * igt@v3d/v3d_submit_csd@bad-bo: - shard-mtlp: NOTRUN -> [SKIP][158] ([i915#2575]) +2 other tests skip [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-1/igt@v3d/v3d_submit_csd@bad-bo.html * igt@vc4/vc4_label_bo@set-bad-handle: - shard-mtlp: NOTRUN -> [SKIP][159] ([i915#7711]) +2 other tests skip [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@vc4/vc4_label_bo@set-bad-handle.html * igt@vc4/vc4_purgeable_bo@free-purged-bo: - shard-tglu: NOTRUN -> [SKIP][160] ([i915#2575]) +1 other test skip [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@vc4/vc4_purgeable_bo@free-purged-bo.html * igt@vc4/vc4_tiling@get-after-free: - shard-dg2: NOTRUN -> [SKIP][161] ([i915#7711]) +1 other test skip [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-11/igt@vc4/vc4_tiling@get-after-free.html #### Possible fixes #### * igt@gem_eio@unwedge-stress: - shard-dg1: [FAIL][162] ([i915#5784]) -> [PASS][163] [162]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-16/igt@gem_eio@unwedge-stress.html [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-13/igt@gem_eio@unwedge-stress.html * igt@gem_exec_fair@basic-pace-share@rcs0: - shard-tglu: [FAIL][164] ([i915#2842]) -> [PASS][165] [164]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-tglu-3/igt@gem_exec_fair@basic-pace-share@rcs0.html [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-3/igt@gem_exec_fair@basic-pace-share@rcs0.html * igt@gem_exec_schedule@preempt-engines@ccs0: - shard-mtlp: [FAIL][166] ([i915#9119]) -> [PASS][167] +4 other tests pass [166]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-4/igt@gem_exec_schedule@preempt-engines@ccs0.html [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-8/igt@gem_exec_schedule@preempt-engines@ccs0.html * igt@gem_exec_schedule@preempt-engines@rcs0: - shard-mtlp: [DMESG-FAIL][168] ([i915#8962] / [i915#9121]) -> [PASS][169] [168]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-4/igt@gem_exec_schedule@preempt-engines@rcs0.html [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-8/igt@gem_exec_schedule@preempt-engines@rcs0.html * igt@gem_exec_whisper@basic-fds-forked-all: - shard-mtlp: [ABORT][170] ([i915#7392] / [i915#8668]) -> [PASS][171] [170]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-5/igt@gem_exec_whisper@basic-fds-forked-all.html [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@gem_exec_whisper@basic-fds-forked-all.html * igt@gem_lmem_swapping@smem-oom@lmem0: - shard-dg1: [TIMEOUT][172] ([i915#5493]) -> [PASS][173] [172]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-16/igt@gem_lmem_swapping@smem-oom@lmem0.html [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-19/igt@gem_lmem_swapping@smem-oom@lmem0.html * igt@gem_softpin@noreloc-s3: - shard-mtlp: [ABORT][174] ([i915#9262]) -> [PASS][175] +1 other test pass [174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-3/igt@gem_softpin@noreloc-s3.html [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-2/igt@gem_softpin@noreloc-s3.html * igt@gen9_exec_parse@allowed-single: - shard-apl: [INCOMPLETE][176] ([i915#5566]) -> [PASS][177] [176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-apl1/igt@gen9_exec_parse@allowed-single.html [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl3/igt@gen9_exec_parse@allowed-single.html * igt@i915_module_load@reload-with-fault-injection: - shard-mtlp: [ABORT][178] ([i915#8489] / [i915#8668]) -> [PASS][179] [178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-4/igt@i915_module_load@reload-with-fault-injection.html [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-8/igt@i915_module_load@reload-with-fault-injection.html * igt@i915_pm_freq_api@freq-suspend@gt0: - shard-dg2: [INCOMPLETE][180] ([i915#8797]) -> [PASS][181] [180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-7/igt@i915_pm_freq_api@freq-suspend@gt0.html [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-3/igt@i915_pm_freq_api@freq-suspend@gt0.html * igt@i915_pm_rpm@modeset-lpsp: - shard-rkl: [SKIP][182] ([i915#1397]) -> [PASS][183] +1 other test pass [182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-rkl-4/igt@i915_pm_rpm@modeset-lpsp.html [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-7/igt@i915_pm_rpm@modeset-lpsp.html * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait: - shard-dg2: [SKIP][184] ([i915#1397]) -> [PASS][185] [184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-1/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-10/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-dg1: [SKIP][186] ([i915#1397]) -> [PASS][187] [186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-19/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-13/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html * igt@i915_pm_rps@reset: - shard-tglu: [INCOMPLETE][188] ([i915#8320]) -> [PASS][189] [188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-tglu-7/igt@i915_pm_rps@reset.html [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-10/igt@i915_pm_rps@reset.html * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip: - shard-tglu: [FAIL][190] ([i915#3743]) -> [PASS][191] +1 other test pass [190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-tglu-10/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-3/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip: - shard-mtlp: [ABORT][192] -> [PASS][193] [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-5/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions: - shard-apl: [FAIL][194] ([i915#2346]) -> [PASS][195] [194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-apl1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html * igt@kms_universal_plane@cursor-fb-leak-pipe-c: - shard-dg1: [FAIL][196] ([i915#9196]) -> [PASS][197] +1 other test pass [196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-13/igt@kms_universal_plane@cursor-fb-leak-pipe-c.html [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-18/igt@kms_universal_plane@cursor-fb-leak-pipe-c.html * igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend: - shard-apl: [INCOMPLETE][198] ([i915#180]) -> [PASS][199] [198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-apl3/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-apl1/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html * igt@prime_mmap_coherency@ioctl-errors: - shard-mtlp: [FAIL][200] ([i915#9334]) -> [PASS][201] [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-mtlp-5/igt@prime_mmap_coherency@ioctl-errors.html [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-mtlp-6/igt@prime_mmap_coherency@ioctl-errors.html #### Warnings #### * igt@device_reset@unbind-reset-rebind: - shard-dg1: [ABORT][202] ([i915#4983] / [i915#7461]) -> [INCOMPLETE][203] ([i915#4983]) [202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-13/igt@device_reset@unbind-reset-rebind.html [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-18/igt@device_reset@unbind-reset-rebind.html * igt@i915_pm_rc6_residency@rc6-idle@vecs0: - shard-tglu: [WARN][204] ([i915#2681]) -> [FAIL][205] ([i915#2681] / [i915#3591]) [204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-tglu-9/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-tglu-6/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html * igt@kms_content_protection@mei_interface: - shard-dg1: [SKIP][206] ([fdo#109300]) -> [SKIP][207] ([i915#7116]) [206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-13/igt@kms_content_protection@mei_interface.html [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-18/igt@kms_content_protection@mei_interface.html * igt@kms_content_protection@type1: - shard-dg2: [SKIP][208] ([i915#7118] / [i915#7162]) -> [SKIP][209] ([i915#7118]) [208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg2-11/igt@kms_content_protection@type1.html [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg2-1/igt@kms_content_protection@type1.html * igt@kms_fbcon_fbt@psr: - shard-rkl: [SKIP][210] ([i915#3955]) -> [SKIP][211] ([fdo#110189] / [i915#3955]) [210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-rkl-4/igt@kms_fbcon_fbt@psr.html [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-rkl-1/igt@kms_fbcon_fbt@psr.html * igt@kms_psr@cursor_plane_move: - shard-dg1: [SKIP][212] ([i915#1072] / [i915#4078]) -> [SKIP][213] ([i915#1072]) +1 other test skip [212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13655/shard-dg1-16/igt@kms_psr@cursor_plane_move.html [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/shard-dg1-15/igt@kms_psr@cursor_plane_move.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280 [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289 [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291 [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300 [fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302 [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315 [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642 [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189 [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068 [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614 [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615 [fdo#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644 [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099 [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839 [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346 [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437 [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527 [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575 [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672 [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681 [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280 [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842 [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856 [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282 [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297 [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359 [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458 [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539 [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3582]: https://gitlab.freedesktop.org/drm/intel/issues/3582 [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591 [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637 [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743 [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804 [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840 [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886 [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955 [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077 [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078 [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083 [i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087 [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213 [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270 [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349 [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538 [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812 [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852 [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860 [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983 [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176 [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190 [i915#5234]: https://gitlab.freedesktop.org/drm/intel/issues/5234 [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235 [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493 [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566 [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784 [i915#5882]: https://gitlab.freedesktop.org/drm/intel/issues/5882 [i915#5978]: https://gitlab.freedesktop.org/drm/intel/issues/5978 [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095 [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227 [i915#6344]: https://gitlab.freedesktop.org/drm/intel/issues/6344 [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658 [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621 [i915#6806]: https://gitlab.freedesktop.org/drm/intel/issues/6806 [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116 [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118 [i915#7162]: https://gitlab.freedesktop.org/drm/intel/issues/7162 [i915#7173]: https://gitlab.freedesktop.org/drm/intel/issues/7173 [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213 [i915#7297]: https://gitlab.freedesktop.org/drm/intel/issues/7297 [i915#7392]: https://gitlab.freedesktop.org/drm/intel/issues/7392 [i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461 [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697 [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711 [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742 [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790 [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828 [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79 [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975 [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213 [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228 [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292 [i915#8320]: https://gitlab.freedesktop.org/drm/intel/issues/8320 [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411 [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414 [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428 [i915#8489]: https://gitlab.freedesktop.org/drm/intel/issues/8489 [i915#8502]: https://gitlab.freedesktop.org/drm/intel/issues/8502 [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555 [i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623 [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668 [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708 [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709 [i915#8724]: https://gitlab.freedesktop.org/drm/intel/issues/8724 [i915#8797]: https://gitlab.freedesktop.org/drm/intel/issues/8797 [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841 [i915#8875]: https://gitlab.freedesktop.org/drm/intel/issues/8875 [i915#8962]: https://gitlab.freedesktop.org/drm/intel/issues/8962 [i915#9010]: https://gitlab.freedesktop.org/drm/intel/issues/9010 [i915#9119]: https://gitlab.freedesktop.org/drm/intel/issues/9119 [i915#9121]: https://gitlab.freedesktop.org/drm/intel/issues/9121 [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196 [i915#9262]: https://gitlab.freedesktop.org/drm/intel/issues/9262 [i915#9312]: https://gitlab.freedesktop.org/drm/intel/issues/9312 [i915#9318]: https://gitlab.freedesktop.org/drm/intel/issues/9318 [i915#9334]: https://gitlab.freedesktop.org/drm/intel/issues/9334 Build changes ------------- * Linux: CI_DRM_13655 -> Patchwork_123955v3 CI-20190529: 20190529 CI_DRM_13655: 2559821d8860b65cf30f69445af66287e6737f2f @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7493: 2517e42d612e0c1ca096acf8b5f6177f7ef4bce7 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_123955v3: 2559821d8860b65cf30f69445af66287e6737f2f @ git://anongit.freedesktop.org/gfx-ci/linux piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v3/index.html [-- Attachment #2: Type: text/html, Size: 69698 bytes --] ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev4) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (9 preceding siblings ...) 2023-09-20 18:19 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork @ 2023-09-21 7:04 ` Patchwork 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2023-09-21 7:22 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-21 7:04 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev4) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim checkpatch failed e5be1de6d023 drm/i915/hdcp: Move checks for gsc health status 496fc28938f9 drm/i915/hdcp: Move common message filling function to its own file Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' Traceback (most recent call last): File "scripts/spdxcheck.py", line 6, in <module> from ply import lex, yacc ModuleNotFoundError: No module named 'ply' -:676: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #676: new file mode 100644 total: 0 errors, 1 warnings, 0 checks, 1304 lines checked ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Refactor i915 HDCP for XE (rev4) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (10 preceding siblings ...) 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev4) Patchwork @ 2023-09-21 7:04 ` Patchwork 2023-09-21 7:22 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-21 7:04 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx == Series Details == Series: Refactor i915 HDCP for XE (rev4) URL : https://patchwork.freedesktop.org/series/123955/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val' +./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p' +./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old' +./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask' +./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return' +./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return' ^ permalink raw reply [flat|nested] 26+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for Refactor i915 HDCP for XE (rev4) 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal ` (11 preceding siblings ...) 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork @ 2023-09-21 7:22 ` Patchwork 12 siblings, 0 replies; 26+ messages in thread From: Patchwork @ 2023-09-21 7:22 UTC (permalink / raw) To: Suraj Kandpal; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 4888 bytes --] == Series Details == Series: Refactor i915 HDCP for XE (rev4) URL : https://patchwork.freedesktop.org/series/123955/ State : failure == Summary == CI Bug Log - changes from CI_DRM_13660 -> Patchwork_123955v4 ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_123955v4 absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_123955v4, please notify your bug team (lgci.bug.filing@intel.com) to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/index.html Participating hosts (39 -> 37) ------------------------------ Missing (2): fi-kbl-soraka fi-snb-2520m Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_123955v4: ### IGT changes ### #### Possible regressions #### * igt@i915_selftest@live@gt_pm: - fi-apl-guc: [PASS][1] -> [DMESG-FAIL][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/fi-apl-guc/igt@i915_selftest@live@gt_pm.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/fi-apl-guc/igt@i915_selftest@live@gt_pm.html Known issues ------------ Here are the changes found in Patchwork_123955v4 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_selftest@live@gt_heartbeat: - fi-apl-guc: [PASS][3] -> [DMESG-FAIL][4] ([i915#5334]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html * igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1: - bat-rplp-1: [PASS][5] -> [ABORT][6] ([i915#8668]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html #### Possible fixes #### * igt@gem_busy@busy@all-engines: - bat-mtlp-8: [DMESG-FAIL][7] ([i915#8962]) -> [PASS][8] [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/bat-mtlp-8/igt@gem_busy@busy@all-engines.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/bat-mtlp-8/igt@gem_busy@busy@all-engines.html * igt@i915_selftest@live@hugepages: - bat-mtlp-8: [DMESG-WARN][9] -> [PASS][10] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/bat-mtlp-8/igt@i915_selftest@live@hugepages.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/bat-mtlp-8/igt@i915_selftest@live@hugepages.html * igt@kms_chamelium_edid@hdmi-edid-read: - {bat-dg2-13}: [DMESG-WARN][11] ([i915#7952]) -> [PASS][12] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/bat-dg2-13/igt@kms_chamelium_edid@hdmi-edid-read.html * igt@kms_hdmi_inject@inject-audio: - fi-kbl-guc: [FAIL][13] ([IGT#3] / [i915#6121]) -> [PASS][14] [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13660/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [IGT#3]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/3 [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334 [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121 [i915#7952]: https://gitlab.freedesktop.org/drm/intel/issues/7952 [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668 [i915#8962]: https://gitlab.freedesktop.org/drm/intel/issues/8962 Build changes ------------- * Linux: CI_DRM_13660 -> Patchwork_123955v4 CI-20190529: 20190529 CI_DRM_13660: 19fa823abcf5b1c12de99ad1978ce650a1d29b39 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7495: 7ed6190bc4f8a3ebc3f0b8b334e8ae6abae03031 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_123955v4: 19fa823abcf5b1c12de99ad1978ce650a1d29b39 @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits 0a65c6f353cd drm/i915/hdcp: Move common message filling function to its own file 4625f03393b5 drm/i915/hdcp: Move checks for gsc health status == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_123955v4/index.html [-- Attachment #2: Type: text/html, Size: 5694 bytes --] ^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2023-10-09 9:14 UTC | newest] Thread overview: 26+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-20 6:36 [Intel-gfx] [PATCH 0/2] Refactor i915 HDCP for XE Suraj Kandpal 2023-09-20 6:36 ` [Intel-gfx] [PATCH 1/2] drm/i915/hdcp: Move checks for gsc health status Suraj Kandpal 2023-10-09 9:06 ` Shankar, Uma 2023-09-20 6:36 ` [Intel-gfx] [PATCH 2/2] drm/i915/hdcp: Move common message filling function to its own file Suraj Kandpal 2023-09-20 8:46 ` kernel test robot 2023-09-20 8:50 ` Suraj Kandpal 2023-09-20 9:13 ` Jani Nikula 2023-09-20 9:29 ` Kandpal, Suraj 2023-09-20 10:38 ` [Intel-gfx] [PATCH v3 " Suraj Kandpal 2023-09-20 12:09 ` Jani Nikula 2023-09-20 15:57 ` Kandpal, Suraj 2023-09-21 5:38 ` [Intel-gfx] [PATCH v4 " Suraj Kandpal 2023-10-09 9:14 ` Shankar, Uma 2023-09-20 9:30 ` [Intel-gfx] [PATCH " kernel test robot 2023-09-21 15:32 ` kernel test robot 2023-09-20 7:05 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Refactor i915 HDCP for XE Patchwork 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev2) Patchwork 2023-09-20 9:28 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2023-09-20 9:46 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev3) Patchwork 2023-09-20 13:02 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2023-09-20 13:16 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2023-09-20 18:19 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Refactor i915 HDCP for XE (rev4) Patchwork 2023-09-21 7:04 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2023-09-21 7:22 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox