RE: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session

2019-02-10 Thread Winkler, Tomas


> 
> 
> 
> On 2/10/2019 1:55 PM, Winkler, Tomas wrote:
> >> On 2/9/2019 9:39 PM, Winkler, Tomas wrote:
>  Request ME FW to start the HDCP2.2 session for an intel port.
>  Prepares payloads for command WIRED_INITIATE_HDCP2_SESSION and
> >> sends
>  to ME FW.
> 
>  On Success, ME FW will start a HDCP2.2 session for the port and
>  provides the content for HDCP2.2 AKE_Init message.
> 
>  v2: Rebased.
>  v3:
>  cldev is add as a separate parameter [Tomas]
>  Redundant comment and typecast are removed [Tomas]
>  v4:
>  %zd is used for size [Alexander]
>  %s/return -1/return -EIO [Alexander]
>  Spellings in commit msg is fixed [Uma]
>  v5: Rebased.
>  v6:
>  Collected the rb-ed by.
>  Realigning the patches in the series.
>  v7:
>  Adjust to the new mei interface.
>  Fix for kdoc.
>  v8:
>  K-Doc Addition.
>  memcpy for const length.
>  v9:
>  s/mei_hdcp_ddi/mei_fw_ddi
>  s/i915_port/mei_i915_port [Tomas]
>  renamed func as mei_hdcp_* [Tomas]
>  Instead of macro, inline func for ddi index is used. [Tomas]
> 
>  Signed-off-by: Ramalingam C 
>  Reviewed-by: Uma Shankar 
>  Acked-by: Tomas Winkler 
>  ---
> drivers/misc/mei/hdcp/mei_hdcp.c | 89
>  
> drivers/misc/mei/hdcp/mei_hdcp.h | 23 +++
> 2 files changed, 112 insertions(+)
> 
>  diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>  b/drivers/misc/mei/hdcp/mei_hdcp.c
>  index 8df069c1b0cc..56d3ac1e6831 100644
>  --- a/drivers/misc/mei/hdcp/mei_hdcp.c
>  +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>  @@ -23,6 +23,95 @@
> #include 
> #include 
> #include 
>  +#include 
>  +#include 
>  +#include 
>  +
>  +#include "mei_hdcp.h"
>  +
>  +static inline u8 mei_get_ddi_index(short int port) {
>  +enum mei_i915_port i915_port = (enum mei_i915_port)port;
>  +
>  +return (u8)(i915_port == PORT_A ? MEI_DDI_A : i915_port); }
>  +
> >>> Still the same code I haven't Acked that patch.
> >> Sorry. I will remove the ack part.
> >>
> >> I prefer this approach as it is not so complicated stuff here. still
> >> if you insist I will use switch case.
> > Yes, I believe that the translation should be understood.
> > This function should returns
> > MEI_DDI_XXX only (it could be u8)
> > It's by accident  that MEI_DDI_B equals PORT_B etc.
> > Please also remove dual enum i915_port and eum port  as well.
> this will do?
> static inline u8 mei_get_ddi_index(short int port) {
>   switch (port) {
>   case PORT_A:
>   return (u8)MEI_DDI_A;
>   case PORT_B:
>   return (u8)MEI_DDI_B;
>   case PORT_C:
>   return (u8)MEI_DDI_C;
>   case PORT_D:
>   return (u8)MEI_DDI_D;
>   case PORT_E:
>   return (u8)MEI_DDI_E;
>   case PORT_F:
>   return (u8)MEI_DDI_F;
>   default:
>   return (u8)MEI_DDI_INVALID_PORT;
>   }
>   }
You can drop (u8)
> 
+   switch (port) {
+   case PORT_A:
+   return MEI_DDI_A;
+   case PORT_B:
+   return MEI_DDI_B;
+   case PORT_C:
+   return MEI_DDI_C;
+   case PORT_D:
+   return MEI_DDI_D;
+   case PORT_E:
+   return MEI_DDI_E;
+   case PORT_F:
+   return MEI_DDI_F;
+   default:
+   return MEI_DDI_INVALID_PORT;
> 
> -Ram
> 
> > Thanks
> > Tomas
> >
> >> Thanks
> >> --Ram
> >>
> >>> Thanks
> >>> Tomas
> >>>
> >>>
>  +/**
>  + * mei_hdcp_initiate_session() - Initiate a Wired HDCP2.2 Tx
>  +Session in ME FW
>  + * @dev: device corresponding to the mei_cl_device
>  + * @hdcp_data: Intel HW specific hdcp data
>  + * @ake_data: AKE_Init msg output.
>  + *
>  + * Return:  0 on Success, <0 on Failure.
>  + */
>  +static int
>  +mei_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 mei_cl_device *cldev;
>  +ssize_t byte;
>  +
>  +if (!dev || !data || !ake_data)
>  +return -EINVAL;
>  +
>  +cldev = to_mei_cl_device(dev);
>  +
>  +session_init_in.header.api_version = HDCP_API_VERSION;
>  +session_init_in.header.command_id =
>  WIRED_INITIATE_HDCP2_SESSION;
>  +session_init_in.header.status = 

Re: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session

2019-02-10 Thread C, Ramalingam



On 2/10/2019 1:55 PM, Winkler, Tomas wrote:

On 2/9/2019 9:39 PM, Winkler, Tomas wrote:

Request ME FW to start the HDCP2.2 session for an intel port.
Prepares payloads for command WIRED_INITIATE_HDCP2_SESSION and

sends

to ME FW.

On Success, ME FW will start a HDCP2.2 session for the port and
provides the content for HDCP2.2 AKE_Init message.

v2: Rebased.
v3:
cldev is add as a separate parameter [Tomas]
Redundant comment and typecast are removed [Tomas]
v4:
%zd is used for size [Alexander]
%s/return -1/return -EIO [Alexander]
Spellings in commit msg is fixed [Uma]
v5: Rebased.
v6:
Collected the rb-ed by.
Realigning the patches in the series.
v7:
Adjust to the new mei interface.
Fix for kdoc.
v8:
K-Doc Addition.
memcpy for const length.
v9:
s/mei_hdcp_ddi/mei_fw_ddi
s/i915_port/mei_i915_port [Tomas]
renamed func as mei_hdcp_* [Tomas]
Instead of macro, inline func for ddi index is used. [Tomas]

Signed-off-by: Ramalingam C 
Reviewed-by: Uma Shankar 
Acked-by: Tomas Winkler 
---
   drivers/misc/mei/hdcp/mei_hdcp.c | 89

   drivers/misc/mei/hdcp/mei_hdcp.h | 23 +++
   2 files changed, 112 insertions(+)

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
b/drivers/misc/mei/hdcp/mei_hdcp.c
index 8df069c1b0cc..56d3ac1e6831 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -23,6 +23,95 @@
   #include 
   #include 
   #include 
+#include 
+#include 
+#include 
+
+#include "mei_hdcp.h"
+
+static inline u8 mei_get_ddi_index(short int port) {
+   enum mei_i915_port i915_port = (enum mei_i915_port)port;
+
+   return (u8)(i915_port == PORT_A ? MEI_DDI_A : i915_port); }
+

Still the same code I haven't Acked that patch.

Sorry. I will remove the ack part.

I prefer this approach as it is not so complicated stuff here. still if you 
insist I
will use switch case.

Yes, I believe that the translation should be understood.
This function should returns
MEI_DDI_XXX only (it could be u8)
It's by accident  that MEI_DDI_B equals PORT_B etc.
Please also remove dual enum i915_port and eum port  as well.

this will do?
static inline u8 mei_get_ddi_index(short int port)
{
 switch (port) {
 case PORT_A:
 return (u8)MEI_DDI_A;
 case PORT_B:
 return (u8)MEI_DDI_B;
 case PORT_C:
 return (u8)MEI_DDI_C;
 case PORT_D:
 return (u8)MEI_DDI_D;
 case PORT_E:
 return (u8)MEI_DDI_E;
 case PORT_F:
 return (u8)MEI_DDI_F;
 default:
 return (u8)MEI_DDI_INVALID_PORT;
 }
 }


-Ram


Thanks
Tomas


Thanks
--Ram


Thanks
Tomas



+/**
+ * mei_hdcp_initiate_session() - Initiate a Wired HDCP2.2 Tx Session
+in ME FW
+ * @dev: device corresponding to the mei_cl_device
+ * @hdcp_data: Intel HW specific hdcp data
+ * @ake_data: AKE_Init msg output.
+ *
+ * Return:  0 on Success, <0 on Failure.
+ */
+static int
+mei_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 mei_cl_device *cldev;
+   ssize_t byte;
+
+   if (!dev || !data || !ake_data)
+   return -EINVAL;
+
+   cldev = to_mei_cl_device(dev);
+
+   session_init_in.header.api_version = HDCP_API_VERSION;
+   session_init_in.header.command_id =
WIRED_INITIATE_HDCP2_SESSION;
+   session_init_in.header.status = ME_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 = mei_get_ddi_index(data->port);
+   session_init_in.protocol = data->protocol;
+
+   byte = mei_cldev_send(cldev, (u8 *)_init_in,
+ sizeof(session_init_in));
+   if (byte < 0) {
+   dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte);
+   return byte;
+   }
+
+   byte = mei_cldev_recv(cldev, (u8 *)_init_out,
+ sizeof(session_init_out));
+   if (byte < 0) {
+   dev_dbg(dev, "mei_cldev_recv failed. %zd\n", byte);
+   return byte;
+   }
+
+   if (session_init_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+   dev_dbg(dev, "ME 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, 

RE: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session

2019-02-10 Thread Winkler, Tomas
> 
> On 2/9/2019 9:39 PM, Winkler, Tomas wrote:
> >> Request ME FW to start the HDCP2.2 session for an intel port.
> >> Prepares payloads for command WIRED_INITIATE_HDCP2_SESSION and
> sends
> >> to ME FW.
> >>
> >> On Success, ME FW will start a HDCP2.2 session for the port and
> >> provides the content for HDCP2.2 AKE_Init message.
> >>
> >> v2: Rebased.
> >> v3:
> >>cldev is add as a separate parameter [Tomas]
> >>Redundant comment and typecast are removed [Tomas]
> >> v4:
> >>%zd is used for size [Alexander]
> >>%s/return -1/return -EIO [Alexander]
> >>Spellings in commit msg is fixed [Uma]
> >> v5: Rebased.
> >> v6:
> >>Collected the rb-ed by.
> >>Realigning the patches in the series.
> >> v7:
> >>Adjust to the new mei interface.
> >>Fix for kdoc.
> >> v8:
> >>K-Doc Addition.
> >>memcpy for const length.
> >> v9:
> >>s/mei_hdcp_ddi/mei_fw_ddi
> >>s/i915_port/mei_i915_port [Tomas]
> >>renamed func as mei_hdcp_* [Tomas]
> >>Instead of macro, inline func for ddi index is used. [Tomas]
> >>
> >> Signed-off-by: Ramalingam C 
> >> Reviewed-by: Uma Shankar 
> >> Acked-by: Tomas Winkler 
> >> ---
> >>   drivers/misc/mei/hdcp/mei_hdcp.c | 89
> >> 
> >>   drivers/misc/mei/hdcp/mei_hdcp.h | 23 +++
> >>   2 files changed, 112 insertions(+)
> >>
> >> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
> >> b/drivers/misc/mei/hdcp/mei_hdcp.c
> >> index 8df069c1b0cc..56d3ac1e6831 100644
> >> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
> >> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
> >> @@ -23,6 +23,95 @@
> >>   #include 
> >>   #include 
> >>   #include 
> >> +#include 
> >> +#include 
> >> +#include 
> >> +
> >> +#include "mei_hdcp.h"
> >> +
> >> +static inline u8 mei_get_ddi_index(short int port) {
> >> +  enum mei_i915_port i915_port = (enum mei_i915_port)port;
> >> +
> >> +  return (u8)(i915_port == PORT_A ? MEI_DDI_A : i915_port); }
> >> +
> > Still the same code I haven't Acked that patch.
> Sorry. I will remove the ack part.
> 
> I prefer this approach as it is not so complicated stuff here. still if you 
> insist I
> will use switch case.
Yes, I believe that the translation should be understood. 
This function should returns 
   MEI_DDI_XXX only (it could be u8)
It's by accident  that MEI_DDI_B equals PORT_B etc. 
Please also remove dual enum i915_port and eum port  as well. 
Thanks
Tomas

> 
> Thanks
> --Ram
> 
> > Thanks
> > Tomas
> >
> >
> >> +/**
> >> + * mei_hdcp_initiate_session() - Initiate a Wired HDCP2.2 Tx Session
> >> +in ME FW
> >> + * @dev: device corresponding to the mei_cl_device
> >> + * @hdcp_data: Intel HW specific hdcp data
> >> + * @ake_data: AKE_Init msg output.
> >> + *
> >> + * Return:  0 on Success, <0 on Failure.
> >> + */
> >> +static int
> >> +mei_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 mei_cl_device *cldev;
> >> +  ssize_t byte;
> >> +
> >> +  if (!dev || !data || !ake_data)
> >> +  return -EINVAL;
> >> +
> >> +  cldev = to_mei_cl_device(dev);
> >> +
> >> +  session_init_in.header.api_version = HDCP_API_VERSION;
> >> +  session_init_in.header.command_id =
> >> WIRED_INITIATE_HDCP2_SESSION;
> >> +  session_init_in.header.status = ME_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 = mei_get_ddi_index(data->port);
> >> +  session_init_in.protocol = data->protocol;
> >> +
> >> +  byte = mei_cldev_send(cldev, (u8 *)_init_in,
> >> +sizeof(session_init_in));
> >> +  if (byte < 0) {
> >> +  dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte);
> >> +  return byte;
> >> +  }
> >> +
> >> +  byte = mei_cldev_recv(cldev, (u8 *)_init_out,
> >> +sizeof(session_init_out));
> >> +  if (byte < 0) {
> >> +  dev_dbg(dev, "mei_cldev_recv failed. %zd\n", byte);
> >> +  return byte;
> >> +  }
> >> +
> >> +  if (session_init_out.header.status != ME_HDCP_STATUS_SUCCESS) {
> >> +  dev_dbg(dev, "ME 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 __attribute__((unused))
> >> +struct i915_hdcp_component_ops mei_hdcp_ops = {
> >> +  .owner = THIS_MODULE,

Re: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session

2019-02-10 Thread C, Ramalingam



On 2/9/2019 9:39 PM, Winkler, Tomas wrote:

Request ME FW to start the HDCP2.2 session for an intel port.
Prepares payloads for command WIRED_INITIATE_HDCP2_SESSION and sends
to ME FW.

On Success, ME FW will start a HDCP2.2 session for the port and provides the
content for HDCP2.2 AKE_Init message.

v2: Rebased.
v3:
   cldev is add as a separate parameter [Tomas]
   Redundant comment and typecast are removed [Tomas]
v4:
   %zd is used for size [Alexander]
   %s/return -1/return -EIO [Alexander]
   Spellings in commit msg is fixed [Uma]
v5: Rebased.
v6:
   Collected the rb-ed by.
   Realigning the patches in the series.
v7:
   Adjust to the new mei interface.
   Fix for kdoc.
v8:
   K-Doc Addition.
   memcpy for const length.
v9:
   s/mei_hdcp_ddi/mei_fw_ddi
   s/i915_port/mei_i915_port [Tomas]
   renamed func as mei_hdcp_* [Tomas]
   Instead of macro, inline func for ddi index is used. [Tomas]

Signed-off-by: Ramalingam C 
Reviewed-by: Uma Shankar 
Acked-by: Tomas Winkler 
---
  drivers/misc/mei/hdcp/mei_hdcp.c | 89

  drivers/misc/mei/hdcp/mei_hdcp.h | 23 +++
  2 files changed, 112 insertions(+)

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
b/drivers/misc/mei/hdcp/mei_hdcp.c
index 8df069c1b0cc..56d3ac1e6831 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -23,6 +23,95 @@
  #include 
  #include 
  #include 
+#include 
+#include 
+#include 
+
+#include "mei_hdcp.h"
+
+static inline u8 mei_get_ddi_index(short int port) {
+   enum mei_i915_port i915_port = (enum mei_i915_port)port;
+
+   return (u8)(i915_port == PORT_A ? MEI_DDI_A : i915_port); }
+

Still the same code I haven't Acked that patch.

Sorry. I will remove the ack part.

I prefer this approach as it is not so complicated stuff here. still if 
you insist I will use switch case.


Thanks
--Ram


Thanks
Tomas



+/**
+ * mei_hdcp_initiate_session() - Initiate a Wired HDCP2.2 Tx Session in
+ME FW
+ * @dev: device corresponding to the mei_cl_device
+ * @hdcp_data: Intel HW specific hdcp data
+ * @ake_data: AKE_Init msg output.
+ *
+ * Return:  0 on Success, <0 on Failure.
+ */
+static int
+mei_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 mei_cl_device *cldev;
+   ssize_t byte;
+
+   if (!dev || !data || !ake_data)
+   return -EINVAL;
+
+   cldev = to_mei_cl_device(dev);
+
+   session_init_in.header.api_version = HDCP_API_VERSION;
+   session_init_in.header.command_id =
WIRED_INITIATE_HDCP2_SESSION;
+   session_init_in.header.status = ME_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 = mei_get_ddi_index(data->port);
+   session_init_in.protocol = data->protocol;
+
+   byte = mei_cldev_send(cldev, (u8 *)_init_in,
+ sizeof(session_init_in));
+   if (byte < 0) {
+   dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte);
+   return byte;
+   }
+
+   byte = mei_cldev_recv(cldev, (u8 *)_init_out,
+ sizeof(session_init_out));
+   if (byte < 0) {
+   dev_dbg(dev, "mei_cldev_recv failed. %zd\n", byte);
+   return byte;
+   }
+
+   if (session_init_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+   dev_dbg(dev, "ME 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 __attribute__((unused))
+struct i915_hdcp_component_ops mei_hdcp_ops = {
+   .owner = THIS_MODULE,
+   .initiate_hdcp2_session = mei_hdcp_initiate_session,
+   .verify_receiver_cert_prepare_km = NULL,
+   .verify_hprime = NULL,
+   .store_pairing_info = NULL,
+   .initiate_locality_check = NULL,
+   .verify_lprime = NULL,
+   .get_session_key = NULL,
+   .repeater_check_flow_prepare_ack = NULL,
+   .verify_mprime = NULL,
+   .enable_hdcp_authentication = NULL,
+   .close_hdcp_session = NULL,
+};

  static int mei_hdcp_probe(struct mei_cl_device *cldev,
  const struct mei_cl_device_id *id) diff --git
a/drivers/misc/mei/hdcp/mei_hdcp.h b/drivers/misc/mei/hdcp/mei_hdcp.h
index 582a7e27ae29..28686f2ae88c 100644
--- 

RE: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session

2019-02-09 Thread Winkler, Tomas

> Request ME FW to start the HDCP2.2 session for an intel port.
> Prepares payloads for command WIRED_INITIATE_HDCP2_SESSION and sends
> to ME FW.
> 
> On Success, ME FW will start a HDCP2.2 session for the port and provides the
> content for HDCP2.2 AKE_Init message.
> 
> v2: Rebased.
> v3:
>   cldev is add as a separate parameter [Tomas]
>   Redundant comment and typecast are removed [Tomas]
> v4:
>   %zd is used for size [Alexander]
>   %s/return -1/return -EIO [Alexander]
>   Spellings in commit msg is fixed [Uma]
> v5: Rebased.
> v6:
>   Collected the rb-ed by.
>   Realigning the patches in the series.
> v7:
>   Adjust to the new mei interface.
>   Fix for kdoc.
> v8:
>   K-Doc Addition.
>   memcpy for const length.
> v9:
>   s/mei_hdcp_ddi/mei_fw_ddi
>   s/i915_port/mei_i915_port [Tomas]
>   renamed func as mei_hdcp_* [Tomas]
>   Instead of macro, inline func for ddi index is used. [Tomas]
> 
> Signed-off-by: Ramalingam C 
> Reviewed-by: Uma Shankar 
> Acked-by: Tomas Winkler 
> ---
>  drivers/misc/mei/hdcp/mei_hdcp.c | 89
> 
>  drivers/misc/mei/hdcp/mei_hdcp.h | 23 +++
>  2 files changed, 112 insertions(+)
> 
> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
> b/drivers/misc/mei/hdcp/mei_hdcp.c
> index 8df069c1b0cc..56d3ac1e6831 100644
> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
> @@ -23,6 +23,95 @@
>  #include 
>  #include 
>  #include 
> +#include 
> +#include 
> +#include 
> +
> +#include "mei_hdcp.h"
> +
> +static inline u8 mei_get_ddi_index(short int port) {
> + enum mei_i915_port i915_port = (enum mei_i915_port)port;
> +
> + return (u8)(i915_port == PORT_A ? MEI_DDI_A : i915_port); }
> +
Still the same code I haven't Acked that patch.
Thanks
Tomas


> +/**
> + * mei_hdcp_initiate_session() - Initiate a Wired HDCP2.2 Tx Session in
> +ME FW
> + * @dev: device corresponding to the mei_cl_device
> + * @hdcp_data: Intel HW specific hdcp data
> + * @ake_data: AKE_Init msg output.
> + *
> + * Return:  0 on Success, <0 on Failure.
> + */
> +static int
> +mei_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 mei_cl_device *cldev;
> + ssize_t byte;
> +
> + if (!dev || !data || !ake_data)
> + return -EINVAL;
> +
> + cldev = to_mei_cl_device(dev);
> +
> + session_init_in.header.api_version = HDCP_API_VERSION;
> + session_init_in.header.command_id =
> WIRED_INITIATE_HDCP2_SESSION;
> + session_init_in.header.status = ME_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 = mei_get_ddi_index(data->port);
> + session_init_in.protocol = data->protocol;
> +
> + byte = mei_cldev_send(cldev, (u8 *)_init_in,
> +   sizeof(session_init_in));
> + if (byte < 0) {
> + dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte);
> + return byte;
> + }
> +
> + byte = mei_cldev_recv(cldev, (u8 *)_init_out,
> +   sizeof(session_init_out));
> + if (byte < 0) {
> + dev_dbg(dev, "mei_cldev_recv failed. %zd\n", byte);
> + return byte;
> + }
> +
> + if (session_init_out.header.status != ME_HDCP_STATUS_SUCCESS) {
> + dev_dbg(dev, "ME 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 __attribute__((unused))
> +struct i915_hdcp_component_ops mei_hdcp_ops = {
> + .owner = THIS_MODULE,
> + .initiate_hdcp2_session = mei_hdcp_initiate_session,
> + .verify_receiver_cert_prepare_km = NULL,
> + .verify_hprime = NULL,
> + .store_pairing_info = NULL,
> + .initiate_locality_check = NULL,
> + .verify_lprime = NULL,
> + .get_session_key = NULL,
> + .repeater_check_flow_prepare_ack = NULL,
> + .verify_mprime = NULL,
> + .enable_hdcp_authentication = NULL,
> + .close_hdcp_session = NULL,
> +};
> 
>  static int mei_hdcp_probe(struct mei_cl_device *cldev,
> const struct mei_cl_device_id *id) diff --git
> a/drivers/misc/mei/hdcp/mei_hdcp.h b/drivers/misc/mei/hdcp/mei_hdcp.h
> index 582a7e27ae29..28686f2ae88c 100644
> --- a/drivers/misc/mei/hdcp/mei_hdcp.h
> +++