All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Winkler, Tomas" <tomas.winkler@intel.com>
To: "C, Ramalingam" <ramalingam.c@intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	"daniel.vetter@ffwll.ch" <daniel.vetter@ffwll.ch>,
	"Shankar, Uma" <uma.shankar@intel.com>
Subject: Re: [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session
Date: Sun, 10 Feb 2019 19:58:13 +0000	[thread overview]
Message-ID: <5B8DA87D05A7694D9FA63FD143655C1B9DAA09FC@hasmsx108.ger.corp.intel.com> (raw)
In-Reply-To: <4d2f247e-a7ca-3163-1bce-c21c87d72075@intel.com>



> 
> 
> 
> 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 <ramalingam.c@intel.com>
> >>>> Reviewed-by: Uma Shankar <uma.shankar@intel.com>
> >>>> Acked-by: Tomas Winkler <tomas.winkler@intel.com>
> >>>> ---
> >>>>    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 <linux/slab.h>
> >>>>    #include <linux/uuid.h>
> >>>>    #include <linux/mei_cl_bus.h>
> >>>> +#include <drm/drm_connector.h>
> >>>> +#include <drm/i915_component.h>
> >>>> +#include <drm/i915_mei_hdcp_interface.h>
> >>>> +
> >>>> +#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 = 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 *)&session_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 *)&session_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
> >>>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.h
> >>>> @@ -363,4 +363,27 @@ struct
> wired_cmd_repeater_auth_stream_req_out
> >> {
> >>>>    	struct hdcp_port_id	port;
> >>>>    } __packed;
> >>>>
> >>>> +enum mei_fw_ddi {
> >>>> +	MEI_DDI_INVALID_PORT = 0x0,
> >>>> +
> >>>> +	MEI_DDI_B = 1,
> >>>> +	MEI_DDI_C,
> >>>> +	MEI_DDI_D,
> >>>> +	MEI_DDI_E,
> >>>> +	MEI_DDI_F,
> >>>> +	MEI_DDI_A = 7,
> >>>> +	MEI_DDI_RANGE_END = MEI_DDI_A,
> >>>> +};
> >>>> +
> >>>> +enum mei_i915_port {
This doesn't belong to here, this is defined twice and it's i915 not  HDCP FW enum
> >>>> +	PORT_NONE = -1,
Please note that you are using a negative value here why you are casting it to u16, maybe 0xFFFFFF will be better. 
> >>>> +
> >>>> +	PORT_A = 0,
> >>>> +	PORT_B,
> >>>> +	PORT_C,
> >>>> +	PORT_D,
> >>>> +	PORT_E,
> >>>> +	PORT_F,
> >>>> +	I915_MAX_PORTS,
> >>>> +};

This should be put from drivers/gpu/drm/i915/intel_display.h
Into include/drm/intel_<someheader>.h 
Together with the port_name() macro 

> >>>>    #endif /* __MEI_HDCP_H__ */
> >>>> --
> >>>> 2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2019-02-10 19:58 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-09  7:12 [PATCH v12 00/38] drm/i915: Implement HDCP2.2 Ramalingam C
2019-02-09  7:12 ` [PATCH v12 01/38] drm/doc: document recommended component helper usage Ramalingam C
2019-02-11  8:31   ` Daniel Vetter
2019-02-12 12:44   ` Laurent Pinchart
2019-02-12 12:52     ` Daniel Vetter
2019-02-09  7:12 ` [PATCH v12 02/38] drm/i915: Gathering the HDCP1.4 routines together Ramalingam C
2019-02-09  7:12 ` [PATCH v12 03/38] drm: header for i915 - MEI_HDCP interface Ramalingam C
2019-02-09  7:12 ` [PATCH v12 04/38] drm/i915: Initialize HDCP2.2 Ramalingam C
2019-02-09  7:12 ` [PATCH v12 05/38] drm/i915: MEI interface definition Ramalingam C
2019-02-09  7:12 ` [PATCH v12 06/38] drm/i915: hdcp1.4 CP_IRQ handling and SW encryption tracking Ramalingam C
2019-02-09  7:12 ` [PATCH v12 07/38] drm/i915: Enable and Disable of HDCP2.2 Ramalingam C
2019-02-09  7:12 ` [PATCH v12 08/38] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2019-02-09  7:12 ` [PATCH v12 09/38] drm: helper functions for hdcp2 seq_num to from u32 Ramalingam C
2019-02-09  7:12 ` [PATCH v12 10/38] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2019-02-09  7:12 ` [PATCH v12 11/38] drm: HDCP2.2 link check period Ramalingam C
2019-02-09  7:12 ` [PATCH v12 12/38] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2019-02-09  7:12 ` [PATCH v12 13/38] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2019-02-09  7:12 ` [PATCH v12 14/38] drm: removing the DP Errata msg and its msg id Ramalingam C
2019-02-09  7:12 ` [PATCH v12 15/38] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C
2019-02-09  7:12 ` [PATCH v12 16/38] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2019-02-09  7:12 ` [PATCH v12 17/38] drm/i915: CP_IRQ handling for DP HDCP2.2 msgs Ramalingam C
2019-02-09  7:12 ` [PATCH v12 18/38] drm/i915: Fix KBL HDCP2.2 encrypt status signalling Ramalingam C
2019-02-09  7:12 ` [PATCH v12 19/38] mei: bus: whitelist hdcp client Ramalingam C
2019-02-09  7:12 ` [PATCH v12 20/38] mei: bus: export to_mei_cl_device for mei client device drivers Ramalingam C
2019-02-09  7:12 ` [PATCH v12 21/38] mei: me: add ice lake point device id Ramalingam C
2019-02-09  7:57   ` Greg KH
2019-02-09  8:23     ` Winkler, Tomas
2019-02-12 13:28   ` Sasha Levin
2019-02-12 13:28   ` Sasha Levin via dri-devel
2019-02-09  7:12 ` [PATCH v12 22/38] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2019-02-09  7:12 ` [PATCH v12 23/38] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2019-02-09  7:12 ` [PATCH v12 24/38] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2019-02-09 16:09   ` Winkler, Tomas
2019-02-10  8:18     ` C, Ramalingam
2019-02-10  8:25       ` Winkler, Tomas
2019-02-10  9:02         ` C, Ramalingam
2019-02-10 19:58           ` Winkler, Tomas [this message]
2019-02-11  5:04   ` [PATCH v13 " Ramalingam C
2019-02-09  7:12 ` [PATCH v12 25/38] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2019-02-09  7:12 ` [PATCH v12 26/38] misc/mei/hdcp: Verify H_prime Ramalingam C
2019-02-09  7:12 ` [PATCH v12 27/38] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C
2019-02-09  7:12 ` [PATCH v12 28/38] misc/mei/hdcp: Initiate Locality check Ramalingam C
2019-02-09  7:12 ` [PATCH v12 29/38] misc/mei/hdcp: Verify L_prime Ramalingam C
2019-02-09  7:12 ` [PATCH v12 30/38] misc/mei/hdcp: Prepare Session Key Ramalingam C
2019-02-09  7:13 ` [PATCH v12 31/38] misc/mei/hdcp: Repeater topology verification and ack Ramalingam C
2019-02-09  7:13 ` [PATCH v12 32/38] misc/mei/hdcp: Verify M_prime Ramalingam C
2019-02-11 18:10   ` Winkler, Tomas
2019-02-09  7:13 ` [PATCH v12 33/38] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C
2019-02-09  7:13 ` [PATCH v12 34/38] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2019-02-09  7:13 ` [PATCH v12 35/38] misc/mei/hdcp: Component framework for I915 Interface Ramalingam C
2019-02-09  7:13 ` [PATCH v12 36/38] FOR_TEST_ONLY: i915/Kconfig: Select mei_hdcp by I915 Ramalingam C
2019-02-09  7:13 ` [PATCH v12 37/38] FOR_TESTING_ONLY: debugfs: Excluding the LSPCon for HDCP1.4 Ramalingam C
2019-02-09  7:13 ` [PATCH v12 38/38] FOR_TESTING_ONLY: ICL: Limit clk to <= 340MHz Ramalingam C
2019-02-09  7:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Implement HDCP2.2 Patchwork
2019-02-09  7:46 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-02-09  8:04 ` ✓ Fi.CI.BAT: success " Patchwork
2019-02-09 10:14 ` ✓ Fi.CI.IGT: " Patchwork
2019-02-11  5:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Implement HDCP2.2 (rev2) Patchwork
2019-02-11  5:46 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-02-11  5:58 ` ✓ Fi.CI.BAT: success " Patchwork
2019-02-11  8:06 ` ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5B8DA87D05A7694D9FA63FD143655C1B9DAA09FC@hasmsx108.ger.corp.intel.com \
    --to=tomas.winkler@intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=ramalingam.c@intel.com \
    --cc=uma.shankar@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.