diff mbox

[v3,11/40] misc/mei/hdcp: Store the HDCP Pairing info

Message ID 1522763873-23041-12-git-send-email-ramalingam.c@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ramalingam C April 3, 2018, 1:57 p.m. UTC
Provides Pairing info to ME to store.

Pairing is a process to fast track the subsequent authentication
with the same HDCP sink.

On Success, received HDCP pairing info is stored in non-volatile
memory of ME.

v2:
  Rebased.
v3:
  cldev is passed as first parameter [Tomas]
  Redundant comments and cast are removed [Tomas]

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
---
 drivers/misc/mei/hdcp/mei_hdcp.c | 61 ++++++++++++++++++++++++++++++++++++++++
 include/linux/mei_hdcp.h         | 10 +++++++
 2 files changed, 71 insertions(+)

Comments

kernel test robot April 3, 2018, 10:34 p.m. UTC | #1
Hi Ramalingam,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on next-20180403]
[cannot apply to v4.16]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Ramalingam-C/drm-i915-Implement-HDCP2-2/20180404-031743
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/misc/mei/hdcp/mei_hdcp.c:52:5: error: redefinition of 'mei_initiate_hdcp2_session'
    int mei_initiate_hdcp2_session(struct mei_cl_device *cldev,
        ^~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:134:5: note: previous definition of 'mei_initiate_hdcp2_session' was here
    int mei_initiate_hdcp2_session(struct mei_cl_device *cldev,
        ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/mei/hdcp/mei_hdcp.c:122:1: error: redefinition of 'mei_verify_receiver_cert_prepare_km'
    mei_verify_receiver_cert_prepare_km(struct mei_cl_device *cldev,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:141:1: note: previous definition of 'mei_verify_receiver_cert_prepare_km' was here
    mei_verify_receiver_cert_prepare_km(struct mei_cl_device *cldev,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/mei/hdcp/mei_hdcp.c:200:5: error: redefinition of 'mei_verify_hprime'
    int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
        ^~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:151:5: note: previous definition of 'mei_verify_hprime' was here
    int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
        ^~~~~~~~~~~~~~~~~
>> drivers/misc/mei/hdcp/mei_hdcp.c:258:5: error: redefinition of 'mei_store_pairing_info'
    int mei_store_pairing_info(struct mei_cl_device *cldev,
        ^~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:157:5: note: previous definition of 'mei_store_pairing_info' was here
    int mei_store_pairing_info(struct mei_cl_device *cldev,
        ^~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/mei/hdcp/mei_hdcp.c:318:5: error: redefinition of 'mei_cldev_register_notify'
    int mei_cldev_register_notify(struct notifier_block *nb)
        ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:125:12: note: previous definition of 'mei_cldev_register_notify' was here
    static int mei_cldev_register_notify(struct notifier_block *nb)
               ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/mei/hdcp/mei_hdcp.c:324:5: error: redefinition of 'mei_cldev_unregister_notify'
    int mei_cldev_unregister_notify(struct notifier_block *nb)
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/misc/mei/hdcp/mei_hdcp.c:35:0:
   include/linux/mei_hdcp.h:129:12: note: previous definition of 'mei_cldev_unregister_notify' was here
    static int mei_cldev_unregister_notify(struct notifier_block *nb)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/mei_hdcp.h:129:12: warning: 'mei_cldev_unregister_notify' defined but not used [-Wunused-function]
   include/linux/mei_hdcp.h:125:12: warning: 'mei_cldev_register_notify' defined but not used [-Wunused-function]
    static int mei_cldev_register_notify(struct notifier_block *nb)
               ^~~~~~~~~~~~~~~~~~~~~~~~~

vim +/mei_store_pairing_info +258 drivers/misc/mei/hdcp/mei_hdcp.c

   188	
   189	/**
   190	 * mei_verify_hprime:
   191	 *	Function to verify AKE_Send_H_prime received
   192	 *
   193	 * @cldev		: Pointer for mei client device
   194	 * @data		: Intel HW specific Data
   195	 * @rx_hprime		: Pointer for AKE_Send_H_prime
   196	 * @hprime_sz		: Input buffer size
   197	 *
   198	 * Returns 0 on Success, <0 on Failure
   199	 */
 > 200	int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
   201			      struct hdcp2_ake_send_hprime *rx_hprime)
   202	{
   203		struct wired_cmd_ake_send_hprime_in send_hprime_in = { { 0 } };
   204		struct wired_cmd_ake_send_hprime_out send_hprime_out = { { 0 } };
   205		struct device *dev;
   206		ssize_t byte;
   207	
   208		if (!data || !rx_hprime)
   209			return -EINVAL;
   210	
   211		dev = &cldev->dev;
   212	
   213		send_hprime_in.header.api_version = HDCP_API_VERSION;
   214		send_hprime_in.header.command_id = WIRED_AKE_SEND_HPRIME;
   215		send_hprime_in.header.status = ME_HDCP_STATUS_SUCCESS;
   216		send_hprime_in.header.buffer_len = WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN;
   217	
   218		send_hprime_in.port.integrated_port_type = data->port_type;
   219		send_hprime_in.port.physical_port = data->port;
   220	
   221		memcpy(send_hprime_in.h_prime, rx_hprime->h_prime,
   222		       sizeof(rx_hprime->h_prime));
   223	
   224		byte = mei_cldev_send(cldev, (u8 *)&send_hprime_in,
   225				      sizeof(send_hprime_in));
   226		if (byte < 0) {
   227			dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
   228			return byte;
   229		}
   230	
   231		byte = mei_cldev_recv(cldev, (u8 *)&send_hprime_out,
   232				      sizeof(send_hprime_out));
   233		if (byte < 0) {
   234			dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
   235			return byte;
   236		}
   237	
   238		if (send_hprime_out.header.status != ME_HDCP_STATUS_SUCCESS) {
   239			dev_dbg(dev, "ME cmd 0x%08X Failed. Status: 0x%X\n",
   240				WIRED_AKE_SEND_HPRIME, send_hprime_out.header.status);
   241			return -1;
   242		}
   243		return 0;
   244	}
   245	EXPORT_SYMBOL(mei_verify_hprime);
   246	
   247	/**
   248	 * mei_store_pairing_info:
   249	 *	Function to store pairing info received from panel
   250	 *
   251	 * @cldev		: Pointer for mei client device
   252	 * @data		: Intel HW specific Data
   253	 * @pairing_info	: Pointer for AKE_Send_Pairing_Info
   254	 *
   255	 * Returns 0 on Success, <0 on Failure
   256	 */
   257	
 > 258	int mei_store_pairing_info(struct mei_cl_device *cldev,
   259				   struct mei_hdcp_data *data,
   260				   struct hdcp2_ake_send_pairing_info *pairing_info)
   261	{
   262		struct wired_cmd_ake_send_pairing_info_in pairing_info_in = { { 0 } };
   263		struct wired_cmd_ake_send_pairing_info_out pairing_info_out = { { 0 } };
   264		struct device *dev;
   265		ssize_t byte;
   266	
   267		if (!data || !pairing_info)
   268			return -EINVAL;
   269	
   270		dev = &cldev->dev;
   271	
   272		pairing_info_in.header.api_version = HDCP_API_VERSION;
   273		pairing_info_in.header.command_id = WIRED_AKE_SEND_PAIRING_INFO;
   274		pairing_info_in.header.status = ME_HDCP_STATUS_SUCCESS;
   275		pairing_info_in.header.buffer_len =
   276						WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN;
   277	
   278		pairing_info_in.port.integrated_port_type = data->port_type;
   279		pairing_info_in.port.physical_port = data->port;
   280	
   281		memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,
   282		       sizeof(pairing_info_in.e_kh_km));
   283	
   284		byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,
   285				      sizeof(pairing_info_in));
   286		if (byte < 0) {
   287			dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
   288			return byte;
   289		}
   290	
   291		byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,
   292				      sizeof(pairing_info_out));
   293		if (byte < 0) {
   294			dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
   295			return byte;
   296		}
   297	
   298		if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {
   299			dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",
   300				WIRED_AKE_SEND_PAIRING_INFO,
   301				pairing_info_out.header.status);
   302			return -1;
   303		}
   304		return 0;
   305	}
   306	EXPORT_SYMBOL(mei_store_pairing_info);
   307	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Shankar, Uma May 9, 2018, 10:28 a.m. UTC | #2
>-----Original Message-----

>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of

>Ramalingam C

>Sent: Tuesday, April 3, 2018 7:27 PM

>To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;

>seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;

>jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;

>Usyskin, Alexander <alexander.usyskin@intel.com>

>Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

>Subject: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP Pairing info

>

>Provides Pairing info to ME to store.

>

>Pairing is a process to fast track the subsequent authentication with the same

>HDCP sink.

>

>On Success, received HDCP pairing info is stored in non-volatile memory of ME.

>

>v2:

>  Rebased.

>v3:

>  cldev is passed as first parameter [Tomas]

>  Redundant comments and cast are removed [Tomas]

>

>Signed-off-by: Ramalingam C <ramalingam.c@intel.com>

>---

> drivers/misc/mei/hdcp/mei_hdcp.c | 61

>++++++++++++++++++++++++++++++++++++++++

> include/linux/mei_hdcp.h         | 10 +++++++

> 2 files changed, 71 insertions(+)

>

>diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c

>b/drivers/misc/mei/hdcp/mei_hdcp.c

>index fa548310de7a..60afdd0cee79 100644

>--- a/drivers/misc/mei/hdcp/mei_hdcp.c

>+++ b/drivers/misc/mei/hdcp/mei_hdcp.c

>@@ -244,6 +244,67 @@ int mei_verify_hprime(struct mei_cl_device *cldev,

>struct mei_hdcp_data *data,  }  EXPORT_SYMBOL(mei_verify_hprime);

>

>+/**


Drop the extra *, unless you really love it :)

>+ * mei_store_pairing_info:

>+ *	Function to store pairing info received from panel

>+ *

>+ * @cldev		: Pointer for mei client device

>+ * @data		: Intel HW specific Data

>+ * @pairing_info	: Pointer for AKE_Send_Pairing_Info

>+ *

>+ * Returns 0 on Success, <0 on Failure

>+ */

>+

>+int mei_store_pairing_info(struct mei_cl_device *cldev,

>+			   struct mei_hdcp_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 device *dev;

>+	ssize_t byte;

>+

>+	if (!data || !pairing_info)

>+		return -EINVAL;

>+

>+	dev = &cldev->dev;

>+

>+	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 = ME_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 = data->port;

>+

>+	memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,


Validate pairing_info->e_kh_km for NULL.

>+	       sizeof(pairing_info_in.e_kh_km));

>+

>+	byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,

>+			      sizeof(pairing_info_in));

>+	if (byte < 0) {

>+		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);

>+		return byte;

>+	}

>+

>+	byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,

>+			      sizeof(pairing_info_out));

>+	if (byte < 0) {

>+		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);

>+		return byte;

>+	}

>+

>+	if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {

>+		dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",

>+			WIRED_AKE_SEND_PAIRING_INFO,

>+			pairing_info_out.header.status);

>+		return -1;

>+	}


Leave a blank line here.

>+	return 0;

>+}

>+EXPORT_SYMBOL(mei_store_pairing_info);

>+

> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)  {

> 	if (enabled)

>diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h index

>00bfde251ba4..be16e49d8018 100644

>--- a/include/linux/mei_hdcp.h

>+++ b/include/linux/mei_hdcp.h

>@@ -118,6 +118,9 @@ mei_verify_receiver_cert_prepare_km(struct

>mei_cl_device *cldev,

> 				    size_t *msg_sz);

> int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,

> 		      struct hdcp2_ake_send_hprime *rx_hprime);

>+int mei_store_pairing_info(struct mei_cl_device *cldev,

>+			   struct mei_hdcp_data *data,

>+			   struct hdcp2_ake_send_pairing_info *pairing_info);

> #else

> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@ -150,5

>+153,12 @@ int mei_verify_hprime(struct mei_cl_device *cldev, struct

>mei_hdcp_data *data,  {

> 	return -ENODEV;

> }

>+static inline

>+int mei_store_pairing_info(struct mei_cl_device *cldev,

>+			   struct mei_hdcp_data *data,

>+			   struct hdcp2_ake_send_pairing_info *pairing_info) {

>+	return -ENODEV;

>+}

> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined

>(_LINUX_MEI_HDCP_H) */

>--

>2.7.4

>

>_______________________________________________

>Intel-gfx mailing list

>Intel-gfx@lists.freedesktop.org

>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ramalingam C May 16, 2018, 3:53 p.m. UTC | #3
On Wednesday 09 May 2018 03:58 PM, Shankar, Uma wrote:
>
>> -----Original Message-----
>> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of
>> Ramalingam C
>> Sent: Tuesday, April 3, 2018 7:27 PM
>> To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
>> seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;
>> jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;
>> Usyskin, Alexander <alexander.usyskin@intel.com>
>> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>
>> Subject: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP Pairing info
>>
>> Provides Pairing info to ME to store.
>>
>> Pairing is a process to fast track the subsequent authentication with the same
>> HDCP sink.
>>
>> On Success, received HDCP pairing info is stored in non-volatile memory of ME.
>>
>> v2:
>>   Rebased.
>> v3:
>>   cldev is passed as first parameter [Tomas]
>>   Redundant comments and cast are removed [Tomas]
>>
>> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
>> ---
>> drivers/misc/mei/hdcp/mei_hdcp.c | 61
>> ++++++++++++++++++++++++++++++++++++++++
>> include/linux/mei_hdcp.h         | 10 +++++++
>> 2 files changed, 71 insertions(+)
>>
>> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>> b/drivers/misc/mei/hdcp/mei_hdcp.c
>> index fa548310de7a..60afdd0cee79 100644
>> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>> @@ -244,6 +244,67 @@ int mei_verify_hprime(struct mei_cl_device *cldev,
>> struct mei_hdcp_data *data,  }  EXPORT_SYMBOL(mei_verify_hprime);
>>
>> +/**
> Drop the extra *, unless you really love it :)
ha ha. Actually I have added intentionally. But removing them across all 
patches
as per your suggestions. :)
>
>> + * mei_store_pairing_info:
>> + *	Function to store pairing info received from panel
>> + *
>> + * @cldev		: Pointer for mei client device
>> + * @data		: Intel HW specific Data
>> + * @pairing_info	: Pointer for AKE_Send_Pairing_Info
>> + *
>> + * Returns 0 on Success, <0 on Failure
>> + */
>> +
>> +int mei_store_pairing_info(struct mei_cl_device *cldev,
>> +			   struct mei_hdcp_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 device *dev;
>> +	ssize_t byte;
>> +
>> +	if (!data || !pairing_info)
>> +		return -EINVAL;
>> +
>> +	dev = &cldev->dev;
>> +
>> +	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 = ME_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 = data->port;
>> +
>> +	memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,
> Validate pairing_info->e_kh_km for NULL.
As we discussed we need not check for null here.
>
>> +	       sizeof(pairing_info_in.e_kh_km));
>> +
>> +	byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,
>> +			      sizeof(pairing_info_in));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,
>> +			      sizeof(pairing_info_out));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {
>> +		dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",
>> +			WIRED_AKE_SEND_PAIRING_INFO,
>> +			pairing_info_out.header.status);
>> +		return -1;
>> +	}
> Leave a blank line here.
sure. I will do it in all patches. Thanks.

--Ram
>
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(mei_store_pairing_info);
>> +
>> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)  {
>> 	if (enabled)
>> diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h index
>> 00bfde251ba4..be16e49d8018 100644
>> --- a/include/linux/mei_hdcp.h
>> +++ b/include/linux/mei_hdcp.h
>> @@ -118,6 +118,9 @@ mei_verify_receiver_cert_prepare_km(struct
>> mei_cl_device *cldev,
>> 				    size_t *msg_sz);
>> int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
>> 		      struct hdcp2_ake_send_hprime *rx_hprime);
>> +int mei_store_pairing_info(struct mei_cl_device *cldev,
>> +			   struct mei_hdcp_data *data,
>> +			   struct hdcp2_ake_send_pairing_info *pairing_info);
>> #else
>> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@ -150,5
>> +153,12 @@ int mei_verify_hprime(struct mei_cl_device *cldev, struct
>> mei_hdcp_data *data,  {
>> 	return -ENODEV;
>> }
>> +static inline
>> +int mei_store_pairing_info(struct mei_cl_device *cldev,
>> +			   struct mei_hdcp_data *data,
>> +			   struct hdcp2_ake_send_pairing_info *pairing_info) {
>> +	return -ENODEV;
>> +}
>> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined
>> (_LINUX_MEI_HDCP_H) */
>> --
>> 2.7.4
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Alexander Usyskin May 17, 2018, 5:59 a.m. UTC | #4
> -----Original Message-----

> From: C, Ramalingam

> Sent: Wednesday, May 16, 2018 18:53

> To: Shankar, Uma <uma.shankar@intel.com>; intel-

> gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;

> seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;

> jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;

> Usyskin, Alexander <alexander.usyskin@intel.com>

> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

> Subject: Re: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP

> Pairing info

> 

> 

> 

> On Wednesday 09 May 2018 03:58 PM, Shankar, Uma wrote:

> >

> >> -----Original Message-----

> >> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On

> >> Behalf Of Ramalingam C

> >> Sent: Tuesday, April 3, 2018 7:27 PM

> >> To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;

> >> seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;

> >> jani.nikula@linux.intel.com; Winkler, Tomas

> >> <tomas.winkler@intel.com>; Usyskin, Alexander

> >> <alexander.usyskin@intel.com>

> >> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

> >> Subject: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP

> >> Pairing info

> >>

> >> Provides Pairing info to ME to store.

> >>

> >> Pairing is a process to fast track the subsequent authentication with

> >> the same HDCP sink.

> >>

> >> On Success, received HDCP pairing info is stored in non-volatile memory

> of ME.

> >>

> >> v2:

> >>   Rebased.

> >> v3:

> >>   cldev is passed as first parameter [Tomas]

> >>   Redundant comments and cast are removed [Tomas]

> >>

> >> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>

> >> ---

> >> drivers/misc/mei/hdcp/mei_hdcp.c | 61

> >> ++++++++++++++++++++++++++++++++++++++++

> >> include/linux/mei_hdcp.h         | 10 +++++++

> >> 2 files changed, 71 insertions(+)

> >>

> >> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c

> >> b/drivers/misc/mei/hdcp/mei_hdcp.c

> >> index fa548310de7a..60afdd0cee79 100644

> >> --- a/drivers/misc/mei/hdcp/mei_hdcp.c

> >> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c

> >> @@ -244,6 +244,67 @@ int mei_verify_hprime(struct mei_cl_device

> >> *cldev, struct mei_hdcp_data *data,  }

> >> EXPORT_SYMBOL(mei_verify_hprime);

> >>

> >> +/**

> > Drop the extra *, unless you really love it :)

> ha ha. Actually I have added intentionally. But removing them across all

> patches as per your suggestions. :)


/** is a syntax for KDoc, so if you want to receive automatic code documentation you should use it and adhere to KDoc syntax
> >

> >> + * mei_store_pairing_info:

> >> + *	Function to store pairing info received from panel

> >> + *

> >> + * @cldev		: Pointer for mei client device

> >> + * @data		: Intel HW specific Data

> >> + * @pairing_info	: Pointer for AKE_Send_Pairing_Info

> >> + *

> >> + * Returns 0 on Success, <0 on Failure */

> >> +

> >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> >> +			   struct mei_hdcp_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 device *dev;

> >> +	ssize_t byte;

> >> +

> >> +	if (!data || !pairing_info)

> >> +		return -EINVAL;

> >> +

> >> +	dev = &cldev->dev;

> >> +

> >> +	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 = ME_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 = data->port;

> >> +

> >> +	memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,

> > Validate pairing_info->e_kh_km for NULL.

> As we discussed we need not check for null here.

> >

> >> +	       sizeof(pairing_info_in.e_kh_km));

> >> +

> >> +	byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,

> >> +			      sizeof(pairing_info_in));

> >> +	if (byte < 0) {

> >> +		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);

> >> +		return byte;

> >> +	}

> >> +

> >> +	byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,

> >> +			      sizeof(pairing_info_out));

> >> +	if (byte < 0) {

> >> +		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);

> >> +		return byte;

> >> +	}

> >> +

> >> +	if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {

> >> +		dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",

> >> +			WIRED_AKE_SEND_PAIRING_INFO,

> >> +			pairing_info_out.header.status);

> >> +		return -1;

> >> +	}

> > Leave a blank line here.

> sure. I will do it in all patches. Thanks.

> 

> --Ram

> >

> >> +	return 0;

> >> +}

> >> +EXPORT_SYMBOL(mei_store_pairing_info);

> >> +

> >> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool

> enabled)  {

> >> 	if (enabled)

> >> diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h

> >> index

> >> 00bfde251ba4..be16e49d8018 100644

> >> --- a/include/linux/mei_hdcp.h

> >> +++ b/include/linux/mei_hdcp.h

> >> @@ -118,6 +118,9 @@ mei_verify_receiver_cert_prepare_km(struct

> >> mei_cl_device *cldev,

> >> 				    size_t *msg_sz);

> >> int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data

> *data,

> >> 		      struct hdcp2_ake_send_hprime *rx_hprime);

> >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> >> +			   struct mei_hdcp_data *data,

> >> +			   struct hdcp2_ake_send_pairing_info *pairing_info);

> >> #else

> >> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@

> >> -150,5

> >> +153,12 @@ int mei_verify_hprime(struct mei_cl_device *cldev, struct

> >> mei_hdcp_data *data,  {

> >> 	return -ENODEV;

> >> }

> >> +static inline

> >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> >> +			   struct mei_hdcp_data *data,

> >> +			   struct hdcp2_ake_send_pairing_info *pairing_info)

> {

> >> +	return -ENODEV;

> >> +}

> >> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined

> >> (_LINUX_MEI_HDCP_H) */

> >> --

> >> 2.7.4

> >>

> >> _______________________________________________

> >> Intel-gfx mailing list

> >> Intel-gfx@lists.freedesktop.org

> >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ramalingam C May 17, 2018, 6:03 a.m. UTC | #5
> -----Original Message-----

> From: Usyskin, Alexander

> Sent: Thursday, May 17, 2018 11:29 AM

> To: C, Ramalingam <ramalingam.c@intel.com>; Shankar, Uma

> <uma.shankar@intel.com>; intel-gfx@lists.freedesktop.org; dri-

> devel@lists.freedesktop.org; seanpaul@chromium.org; daniel@ffwll.ch;

> chris@chris-wilson.co.uk; jani.nikula@linux.intel.com; Winkler, Tomas

> <tomas.winkler@intel.com>

> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

> Subject: RE: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP Pairing

> info

> 

> 

> 

> > -----Original Message-----

> > From: C, Ramalingam

> > Sent: Wednesday, May 16, 2018 18:53

> > To: Shankar, Uma <uma.shankar@intel.com>; intel-

> > gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;

> > seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;

> > jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;

> > Usyskin, Alexander <alexander.usyskin@intel.com>

> > Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

> > Subject: Re: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the

> > HDCP Pairing info

> >

> >

> >

> > On Wednesday 09 May 2018 03:58 PM, Shankar, Uma wrote:

> > >

> > >> -----Original Message-----

> > >> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On

> > >> Behalf Of Ramalingam C

> > >> Sent: Tuesday, April 3, 2018 7:27 PM

> > >> To: intel-gfx@lists.freedesktop.org;

> > >> dri-devel@lists.freedesktop.org; seanpaul@chromium.org;

> > >> daniel@ffwll.ch; chris@chris-wilson.co.uk;

> > >> jani.nikula@linux.intel.com; Winkler, Tomas

> > >> <tomas.winkler@intel.com>; Usyskin, Alexander

> > >> <alexander.usyskin@intel.com>

> > >> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

> > >> Subject: [Intel-gfx] [PATCH v3 11/40] misc/mei/hdcp: Store the HDCP

> > >> Pairing info

> > >>

> > >> Provides Pairing info to ME to store.

> > >>

> > >> Pairing is a process to fast track the subsequent authentication

> > >> with the same HDCP sink.

> > >>

> > >> On Success, received HDCP pairing info is stored in non-volatile

> > >> memory

> > of ME.

> > >>

> > >> v2:

> > >>   Rebased.

> > >> v3:

> > >>   cldev is passed as first parameter [Tomas]

> > >>   Redundant comments and cast are removed [Tomas]

> > >>

> > >> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>

> > >> ---

> > >> drivers/misc/mei/hdcp/mei_hdcp.c | 61

> > >> ++++++++++++++++++++++++++++++++++++++++

> > >> include/linux/mei_hdcp.h         | 10 +++++++

> > >> 2 files changed, 71 insertions(+)

> > >>

> > >> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c

> > >> b/drivers/misc/mei/hdcp/mei_hdcp.c

> > >> index fa548310de7a..60afdd0cee79 100644

> > >> --- a/drivers/misc/mei/hdcp/mei_hdcp.c

> > >> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c

> > >> @@ -244,6 +244,67 @@ int mei_verify_hprime(struct mei_cl_device

> > >> *cldev, struct mei_hdcp_data *data,  }

> > >> EXPORT_SYMBOL(mei_verify_hprime);

> > >>

> > >> +/**

> > > Drop the extra *, unless you really love it :)

> > ha ha. Actually I have added intentionally. But removing them across

> > all patches as per your suggestions. :)

> 

> /** is a syntax for KDoc, so if you want to receive automatic code

> documentation you should use it and adhere to KDoc syntax


Thanks Alexander for the information. At present I am not adding the KDoc  support, if it is not compulsory.
So I will remove the /**.

--Ram
> > >

> > >> + * mei_store_pairing_info:

> > >> + *	Function to store pairing info received from panel

> > >> + *

> > >> + * @cldev		: Pointer for mei client device

> > >> + * @data		: Intel HW specific Data

> > >> + * @pairing_info	: Pointer for AKE_Send_Pairing_Info

> > >> + *

> > >> + * Returns 0 on Success, <0 on Failure */

> > >> +

> > >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> > >> +			   struct mei_hdcp_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 device *dev;

> > >> +	ssize_t byte;

> > >> +

> > >> +	if (!data || !pairing_info)

> > >> +		return -EINVAL;

> > >> +

> > >> +	dev = &cldev->dev;

> > >> +

> > >> +	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 = ME_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 = data->port;

> > >> +

> > >> +	memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,

> > > Validate pairing_info->e_kh_km for NULL.

> > As we discussed we need not check for null here.

> > >

> > >> +	       sizeof(pairing_info_in.e_kh_km));

> > >> +

> > >> +	byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,

> > >> +			      sizeof(pairing_info_in));

> > >> +	if (byte < 0) {

> > >> +		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);

> > >> +		return byte;

> > >> +	}

> > >> +

> > >> +	byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,

> > >> +			      sizeof(pairing_info_out));

> > >> +	if (byte < 0) {

> > >> +		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);

> > >> +		return byte;

> > >> +	}

> > >> +

> > >> +	if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {

> > >> +		dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",

> > >> +			WIRED_AKE_SEND_PAIRING_INFO,

> > >> +			pairing_info_out.header.status);

> > >> +		return -1;

> > >> +	}

> > > Leave a blank line here.

> > sure. I will do it in all patches. Thanks.

> >

> > --Ram

> > >

> > >> +	return 0;

> > >> +}

> > >> +EXPORT_SYMBOL(mei_store_pairing_info);

> > >> +

> > >> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev,

> > >> bool

> > enabled)  {

> > >> 	if (enabled)

> > >> diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h

> > >> index

> > >> 00bfde251ba4..be16e49d8018 100644

> > >> --- a/include/linux/mei_hdcp.h

> > >> +++ b/include/linux/mei_hdcp.h

> > >> @@ -118,6 +118,9 @@ mei_verify_receiver_cert_prepare_km(struct

> > >> mei_cl_device *cldev,

> > >> 				    size_t *msg_sz);

> > >> int mei_verify_hprime(struct mei_cl_device *cldev, struct

> > >> mei_hdcp_data

> > *data,

> > >> 		      struct hdcp2_ake_send_hprime *rx_hprime);

> > >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> > >> +			   struct mei_hdcp_data *data,

> > >> +			   struct hdcp2_ake_send_pairing_info *pairing_info);

> > >> #else

> > >> static int mei_cldev_register_notify(struct notifier_block *nb)  {

> > >> @@

> > >> -150,5

> > >> +153,12 @@ int mei_verify_hprime(struct mei_cl_device *cldev,

> > >> +struct

> > >> mei_hdcp_data *data,  {

> > >> 	return -ENODEV;

> > >> }

> > >> +static inline

> > >> +int mei_store_pairing_info(struct mei_cl_device *cldev,

> > >> +			   struct mei_hdcp_data *data,

> > >> +			   struct hdcp2_ake_send_pairing_info *pairing_info)

> > {

> > >> +	return -ENODEV;

> > >> +}

> > >> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined

> > >> (_LINUX_MEI_HDCP_H) */

> > >> --

> > >> 2.7.4

> > >>

> > >> _______________________________________________

> > >> Intel-gfx mailing list

> > >> Intel-gfx@lists.freedesktop.org

> > >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Jani Nikula May 17, 2018, 8:17 a.m. UTC | #6
On Thu, 17 May 2018, "C, Ramalingam" <ramalingam.c@intel.com> wrote:
>> > >> +/**
>> > > Drop the extra *, unless you really love it :)
>> > ha ha. Actually I have added intentionally. But removing them across
>> > all patches as per your suggestions. :)
>> 
>> /** is a syntax for KDoc, so if you want to receive automatic code
>> documentation you should use it and adhere to KDoc syntax
>
> Thanks Alexander for the information. At present I am not adding the
> KDoc support, if it is not compulsory.  So I will remove the /**.

It's "kernel-doc" to be pedantic. No such thing as KDoc.

If you use /** please stick to the exact kernel-doc format. The below is
not. You'll find the documentation under Documentation/doc-guide.

If you drop /** please either use free form comments or stick to the
kernel-doc format. Please don't leave behind things that look eerily
similar to kernel-doc comments but are not. Without /** you won't even
get warnings about them.

/**
 * mei_store_pairing_info - Store pairing info received from panel
 * @cldev: Pointer for mei client device
 * @data: Intel HW specific Data
 * @pairing_info: Pointer for AKE_Send_Pairing_Info
 *
 * Returns 0 on success, <0 on failure.
 */

BR,
Jani.


>
> --Ram
>> > >
>> > >> + * mei_store_pairing_info:
>> > >> + *	Function to store pairing info received from panel
>> > >> + *
>> > >> + * @cldev		: Pointer for mei client device
>> > >> + * @data		: Intel HW specific Data
>> > >> + * @pairing_info	: Pointer for AKE_Send_Pairing_Info
>> > >> + *
>> > >> + * Returns 0 on Success, <0 on Failure */
Ramalingam C May 21, 2018, 12:19 p.m. UTC | #7
Thanks Jani. I will use free form comments in v4, meanwhile i will 
explore the required stuff for kernel-doc and add kernel-doc entries 
where ever it makes sense, in upcoming versions.

--Ram

On Thursday 17 May 2018 01:47 PM, Jani Nikula wrote:
> On Thu, 17 May 2018, "C, Ramalingam" <ramalingam.c@intel.com> wrote:
>>>>>> +/**
>>>>> Drop the extra *, unless you really love it :)
>>>> ha ha. Actually I have added intentionally. But removing them across
>>>> all patches as per your suggestions. :)
>>> /** is a syntax for KDoc, so if you want to receive automatic code
>>> documentation you should use it and adhere to KDoc syntax
>> Thanks Alexander for the information. At present I am not adding the
>> KDoc support, if it is not compulsory.  So I will remove the /**.
> It's "kernel-doc" to be pedantic. No such thing as KDoc.
>
> If you use /** please stick to the exact kernel-doc format. The below is
> not. You'll find the documentation under Documentation/doc-guide.
>
> If you drop /** please either use free form comments or stick to the
> kernel-doc format. Please don't leave behind things that look eerily
> similar to kernel-doc comments but are not. Without /** you won't even
> get warnings about them.
>
> /**
>   * mei_store_pairing_info - Store pairing info received from panel
>   * @cldev: Pointer for mei client device
>   * @data: Intel HW specific Data
>   * @pairing_info: Pointer for AKE_Send_Pairing_Info
>   *
>   * Returns 0 on success, <0 on failure.
>   */
>
> BR,
> Jani.
>
>
>> --Ram
>>>>>> + * mei_store_pairing_info:
>>>>>> + *	Function to store pairing info received from panel
>>>>>> + *
>>>>>> + * @cldev		: Pointer for mei client device
>>>>>> + * @data		: Intel HW specific Data
>>>>>> + * @pairing_info	: Pointer for AKE_Send_Pairing_Info
>>>>>> + *
>>>>>> + * Returns 0 on Success, <0 on Failure */
diff mbox

Patch

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index fa548310de7a..60afdd0cee79 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -244,6 +244,67 @@  int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 }
 EXPORT_SYMBOL(mei_verify_hprime);
 
+/**
+ * mei_store_pairing_info:
+ *	Function to store pairing info received from panel
+ *
+ * @cldev		: Pointer for mei client device
+ * @data		: Intel HW specific Data
+ * @pairing_info	: Pointer for AKE_Send_Pairing_Info
+ *
+ * Returns 0 on Success, <0 on Failure
+ */
+
+int mei_store_pairing_info(struct mei_cl_device *cldev,
+			   struct mei_hdcp_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 device *dev;
+	ssize_t byte;
+
+	if (!data || !pairing_info)
+		return -EINVAL;
+
+	dev = &cldev->dev;
+
+	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 = ME_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 = data->port;
+
+	memcpy(pairing_info_in.e_kh_km, pairing_info->e_kh_km,
+	       sizeof(pairing_info_in.e_kh_km));
+
+	byte = mei_cldev_send(cldev, (u8 *)&pairing_info_in,
+			      sizeof(pairing_info_in));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	byte = mei_cldev_recv(cldev, (u8 *)&pairing_info_out,
+			      sizeof(pairing_info_out));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	if (pairing_info_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+		dev_dbg(dev, "ME cmd 0x%08X failed. Status: 0x%X\n",
+			WIRED_AKE_SEND_PAIRING_INFO,
+			pairing_info_out.header.status);
+		return -1;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(mei_store_pairing_info);
+
 void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)
 {
 	if (enabled)
diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h
index 00bfde251ba4..be16e49d8018 100644
--- a/include/linux/mei_hdcp.h
+++ b/include/linux/mei_hdcp.h
@@ -118,6 +118,9 @@  mei_verify_receiver_cert_prepare_km(struct mei_cl_device *cldev,
 				    size_t *msg_sz);
 int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 		      struct hdcp2_ake_send_hprime *rx_hprime);
+int mei_store_pairing_info(struct mei_cl_device *cldev,
+			   struct mei_hdcp_data *data,
+			   struct hdcp2_ake_send_pairing_info *pairing_info);
 #else
 static int mei_cldev_register_notify(struct notifier_block *nb)
 {
@@ -150,5 +153,12 @@  int mei_verify_hprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 {
 	return -ENODEV;
 }
+static inline
+int mei_store_pairing_info(struct mei_cl_device *cldev,
+			   struct mei_hdcp_data *data,
+			   struct hdcp2_ake_send_pairing_info *pairing_info)
+{
+	return -ENODEV;
+}
 #endif /* defined (CONFIG_INTEL_MEI_HDCP) */
 #endif /* defined (_LINUX_MEI_HDCP_H) */