diff mbox

[v3,17/40] misc/mei/hdcp: Enabling the HDCP authentication

Message ID 1522763873-23041-18-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
Request to ME to configure a port as authenticated.

On Success, ME FW will mark th eport as authenticated and provides
HDCP chiper of the port with the encryption keys.

Enabling the Authentication can be requested once the all
stages of HDCP2.2 authentication is completed by interating with
ME FW.

Only after this stage, driver can enable the HDCP encryption for
the port, through HW registers.

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 | 54 ++++++++++++++++++++++++++++++++++++++++
 include/linux/mei_hdcp.h         |  7 ++++++
 2 files changed, 61 insertions(+)

Comments

Uma Shankar May 9, 2018, 1:55 p.m. UTC | #1
>-----Original Message-----

>From: dri-devel [mailto:dri-devel-bounces@lists.freedesktop.org] On Behalf Of

>Ramalingam C

>Sent: Tuesday, April 3, 2018 7:28 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: [PATCH v3 17/40] misc/mei/hdcp: Enabling the HDCP authentication

>

>Request to ME to configure a port as authenticated.

>

>On Success, ME FW will mark th eport as authenticated and provides HDCP chipper


Rectify "the". Also it should be HDCP cipher.

>of the port with the encryption keys.

>

>Enabling the Authentication can be requested once the all stages of HDCP2.2

>authentication is completed by interating with ME FW.


Typo in interacting.

>

>Only after this stage, driver can enable the HDCP encryption for the port, through

>HW registers.

>

>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 | 54

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

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

> 2 files changed, 61 insertions(+)

>

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

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

>index 68eb5267a8e7..b5d1da41f1d9 100644

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

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

>@@ -632,6 +632,60 @@ int mei_verify_mprime(struct mei_cl_device *cldev,

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

>

>+/**

>+ * mei_enable_hdcp_authentication:

>+ *	Function to request ME FW to mark a port as authenticated.

>+ *

>+ * @cldev		: Pointer for mei client device

>+ * @data		: Intel HW specific Data

>+ *

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

>+ */

>+int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,

>+				   struct mei_hdcp_data *data)

>+{

>+	struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } };

>+	struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } };

>+	struct device *dev;

>+	ssize_t byte;

>+

>+	if (!data)

>+		return -EINVAL;

>+

>+	dev = &cldev->dev;

>+

>+	enable_auth_in.header.api_version = HDCP_API_VERSION;

>+	enable_auth_in.header.command_id = WIRED_ENABLE_AUTH;

>+	enable_auth_in.header.status = ME_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 = data->port;

>+	enable_auth_in.stream_type = data->streams[0].stream_type;


Check for data->streams.

>+

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

>+			      sizeof(enable_auth_in));

>+	if (byte < 0) {

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

>+		return byte;

>+	}

>+

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

>+			      sizeof(enable_auth_out));

>+	if (byte < 0) {

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

>+		return byte;

>+	}

>+

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

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

>+			WIRED_ENABLE_AUTH,

>enable_auth_out.header.status);

>+		return -1;

>+	}


Leave a blank line here.

>+	return 0;

>+}

>+EXPORT_SYMBOL(mei_enable_hdcp_authentication);

>+

> 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

>dbc216e13f97..2366d0741abe 100644

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

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

>@@ -136,6 +136,8 @@ mei_repeater_check_flow_prepare_ack(struct

>mei_cl_device *cldev,

> 				    struct hdcp2_rep_send_ack *rep_send_ack);

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

> 		      struct hdcp2_rep_stream_ready *stream_ready);

>+int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,

>+				   struct mei_hdcp_data *data);

> #else

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

>+211,10 @@ int mei_verify_mprime(struct mei_cl_device *cldev, struct

>mei_hdcp_data *data,  {

> 	return -ENODEV;

> }

>+static inline int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,

>+						 struct mei_hdcp_data *data)

>+{

>+	return -ENODEV;

>+}

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

>(_LINUX_MEI_HDCP_H) */

>--

>2.7.4

>

>_______________________________________________

>dri-devel mailing list

>dri-devel@lists.freedesktop.org

>https://lists.freedesktop.org/mailman/listinfo/dri-devel
Ramalingam C May 16, 2018, 4:40 p.m. UTC | #2
On Wednesday 09 May 2018 07:25 PM, Shankar, Uma wrote:
>
>> -----Original Message-----
>> From: dri-devel [mailto:dri-devel-bounces@lists.freedesktop.org] On Behalf Of
>> Ramalingam C
>> Sent: Tuesday, April 3, 2018 7:28 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: [PATCH v3 17/40] misc/mei/hdcp: Enabling the HDCP authentication
>>
>> Request to ME to configure a port as authenticated.
>>
>> On Success, ME FW will mark th eport as authenticated and provides HDCP chipper
> Rectify "the". Also it should be HDCP cipher.
>
>> of the port with the encryption keys.
>>
>> Enabling the Authentication can be requested once the all stages of HDCP2.2
>> authentication is completed by interating with ME FW.
> Typo in interacting.
Will fix it.

--Ram
>
>> Only after this stage, driver can enable the HDCP encryption for the port, through
>> HW registers.
>>
>> 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 | 54
>> ++++++++++++++++++++++++++++++++++++++++
>> include/linux/mei_hdcp.h         |  7 ++++++
>> 2 files changed, 61 insertions(+)
>>
>> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>> b/drivers/misc/mei/hdcp/mei_hdcp.c
>> index 68eb5267a8e7..b5d1da41f1d9 100644
>> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>> @@ -632,6 +632,60 @@ int mei_verify_mprime(struct mei_cl_device *cldev,
>> struct mei_hdcp_data *data,  }  EXPORT_SYMBOL(mei_verify_mprime);
>>
>> +/**
>> + * mei_enable_hdcp_authentication:
>> + *	Function to request ME FW to mark a port as authenticated.
>> + *
>> + * @cldev		: Pointer for mei client device
>> + * @data		: Intel HW specific Data
>> + *
>> + * Returns 0 on Success, <0 on Failure
>> + */
>> +int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
>> +				   struct mei_hdcp_data *data)
>> +{
>> +	struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } };
>> +	struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } };
>> +	struct device *dev;
>> +	ssize_t byte;
>> +
>> +	if (!data)
>> +		return -EINVAL;
>> +
>> +	dev = &cldev->dev;
>> +
>> +	enable_auth_in.header.api_version = HDCP_API_VERSION;
>> +	enable_auth_in.header.command_id = WIRED_ENABLE_AUTH;
>> +	enable_auth_in.header.status = ME_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 = data->port;
>> +	enable_auth_in.stream_type = data->streams[0].stream_type;
> Check for data->streams.
>
>> +
>> +	byte = mei_cldev_send(cldev, (u8 *)&enable_auth_in,
>> +			      sizeof(enable_auth_in));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	byte = mei_cldev_recv(cldev, (u8 *)&enable_auth_out,
>> +			      sizeof(enable_auth_out));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	if (enable_auth_out.header.status != ME_HDCP_STATUS_SUCCESS) {
>> +		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
>> +			WIRED_ENABLE_AUTH,
>> enable_auth_out.header.status);
>> +		return -1;
>> +	}
> Leave a blank line here.
>
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(mei_enable_hdcp_authentication);
>> +
>> 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
>> dbc216e13f97..2366d0741abe 100644
>> --- a/include/linux/mei_hdcp.h
>> +++ b/include/linux/mei_hdcp.h
>> @@ -136,6 +136,8 @@ mei_repeater_check_flow_prepare_ack(struct
>> mei_cl_device *cldev,
>> 				    struct hdcp2_rep_send_ack *rep_send_ack);
>> int mei_verify_mprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
>> 		      struct hdcp2_rep_stream_ready *stream_ready);
>> +int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
>> +				   struct mei_hdcp_data *data);
>> #else
>> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@ -209,5
>> +211,10 @@ int mei_verify_mprime(struct mei_cl_device *cldev, struct
>> mei_hdcp_data *data,  {
>> 	return -ENODEV;
>> }
>> +static inline int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
>> +						 struct mei_hdcp_data *data)
>> +{
>> +	return -ENODEV;
>> +}
>> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined
>> (_LINUX_MEI_HDCP_H) */
>> --
>> 2.7.4
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 68eb5267a8e7..b5d1da41f1d9 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -632,6 +632,60 @@  int mei_verify_mprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 }
 EXPORT_SYMBOL(mei_verify_mprime);
 
+/**
+ * mei_enable_hdcp_authentication:
+ *	Function to request ME FW to mark a port as authenticated.
+ *
+ * @cldev		: Pointer for mei client device
+ * @data		: Intel HW specific Data
+ *
+ * Returns 0 on Success, <0 on Failure
+ */
+int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
+				   struct mei_hdcp_data *data)
+{
+	struct wired_cmd_enable_auth_in enable_auth_in = { { 0 } };
+	struct wired_cmd_enable_auth_out enable_auth_out = { { 0 } };
+	struct device *dev;
+	ssize_t byte;
+
+	if (!data)
+		return -EINVAL;
+
+	dev = &cldev->dev;
+
+	enable_auth_in.header.api_version = HDCP_API_VERSION;
+	enable_auth_in.header.command_id = WIRED_ENABLE_AUTH;
+	enable_auth_in.header.status = ME_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 = data->port;
+	enable_auth_in.stream_type = data->streams[0].stream_type;
+
+	byte = mei_cldev_send(cldev, (u8 *)&enable_auth_in,
+			      sizeof(enable_auth_in));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	byte = mei_cldev_recv(cldev, (u8 *)&enable_auth_out,
+			      sizeof(enable_auth_out));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	if (enable_auth_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
+			WIRED_ENABLE_AUTH, enable_auth_out.header.status);
+		return -1;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(mei_enable_hdcp_authentication);
+
 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 dbc216e13f97..2366d0741abe 100644
--- a/include/linux/mei_hdcp.h
+++ b/include/linux/mei_hdcp.h
@@ -136,6 +136,8 @@  mei_repeater_check_flow_prepare_ack(struct mei_cl_device *cldev,
 				    struct hdcp2_rep_send_ack *rep_send_ack);
 int mei_verify_mprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 		      struct hdcp2_rep_stream_ready *stream_ready);
+int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
+				   struct mei_hdcp_data *data);
 #else
 static int mei_cldev_register_notify(struct notifier_block *nb)
 {
@@ -209,5 +211,10 @@  int mei_verify_mprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
 {
 	return -ENODEV;
 }
+static inline int mei_enable_hdcp_authentication(struct mei_cl_device *cldev,
+						 struct mei_hdcp_data *data)
+{
+	return -ENODEV;
+}
 #endif /* defined (CONFIG_INTEL_MEI_HDCP) */
 #endif /* defined (_LINUX_MEI_HDCP_H) */