All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ramalingam C <ramalingam.c@intel.com>
To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
	seanpaul@chromium.org, chris@chris-wilson.co.uk,
	tomas.winkler@intel.com, jani.nikula@linux.intel.com
Cc: uma.shankar@intel.com, rodrigo.vivi@intel.com
Subject: [PATCH v2 18/42] misc/mei/hdcp: Verify M_prime
Date: Thu,  8 Mar 2018 17:28:45 +0530	[thread overview]
Message-ID: <1520510349-8385-19-git-send-email-ramalingam.c@intel.com> (raw)
In-Reply-To: <1520510349-8385-1-git-send-email-ramalingam.c@intel.com>

Request to ME to verify the M_Prime received from the HDCP sink.

ME FW will calculate the M and compare with M_prime received
as part of RepeaterAuth_Stream_Ready, which is HDCP2.2 protocol msg.

On successful completion of this stage, downstream propagation of
the stream management info is completed.

v2:
  Rebased.

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

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 02c90770dcb6..0e70213cded8 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -619,6 +619,91 @@ mei_repeater_check_flow_prepare_ack(struct mei_hdcp_data *data,
 }
 EXPORT_SYMBOL(mei_repeater_check_flow_prepare_ack);
 
+static inline void reverse_endianness(u8 *dest, size_t dst_sz, u8 *src)
+{
+	u32 index;
+
+	if (dest != NULL && dst_sz != 0) {
+		for (index = 0; index < dst_sz && index < sizeof(u32);
+		     index++) {
+			dest[dst_sz - index - 1] = src[index];
+		}
+	}
+}
+
+/**
+ * mei_verify_mprime:
+ *	Function to verify mprime.
+ *
+ * @data		: Intel HW specific Data
+ * @stream_ready	: pointer for RepeaterAuth_Stream_Ready message.
+ *
+ * Returns 0 on Success, <0 on Failure
+ */
+int mei_verify_mprime(struct mei_hdcp_data *data,
+		      struct hdcp2_rep_stream_ready *stream_ready)
+{
+	struct wired_cmd_repeater_auth_stream_req_in
+					verify_mprime_in = { { 0 } };
+	struct wired_cmd_repeater_auth_stream_req_out
+					verify_mprime_out = { { 0 } };
+	enum me_hdcp_status status;
+	struct device *dev;
+	ssize_t byte;
+
+	if (!stream_ready || !data)
+		return -EINVAL;
+
+	/* check for the mei_device enabled or not */
+	if (!mei_cldev_active_and_enabled(data->cldev))
+		return -ENODEV;
+
+	dev = &data->cldev->dev;
+
+	verify_mprime_in.header.api_version = HDCP_API_VERSION;
+	verify_mprime_in.header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ;
+	verify_mprime_in.header.status = ME_HDCP_STATUS_SUCCESS;
+	verify_mprime_in.header.buffer_len =
+			WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_MIN_IN;
+
+	verify_mprime_in.port.integrated_port_type = data->port_type;
+	verify_mprime_in.port.physical_port = data->port;
+
+	memcpy(verify_mprime_in.m_prime, stream_ready->m_prime,
+	       HDCP_2_2_MPRIME_LEN);
+	reverse_endianness((u8 *)&verify_mprime_in.seq_num_m,
+			   HDCP_2_2_SEQ_NUM_LEN, (u8 *)&data->seq_num_m);
+	memcpy(verify_mprime_in.streams, data->streams,
+	       (data->k * sizeof(struct hdcp2_streamid_type)));
+
+	verify_mprime_in.k = __swab16(data->k);
+
+	/* Request to ME */
+	byte = mei_cldev_send(data->cldev, (u8 *)&verify_mprime_in,
+			      sizeof(verify_mprime_in));
+	if (byte < 0) {
+		dev_err(dev, "mei_cldev_send failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	/* Response from ME */
+	byte = mei_cldev_recv(data->cldev, (u8 *)&verify_mprime_out,
+			      sizeof(verify_mprime_out));
+	if (byte < 0) {
+		dev_err(dev, "mei_cldev_recv failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	status = (enum me_hdcp_status)verify_mprime_out.header.status;
+	if (status != ME_HDCP_STATUS_SUCCESS) {
+		dev_err(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
+			WIRED_REPEATER_AUTH_STREAM_REQ, status);
+		return -1;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(mei_verify_mprime);
+
 static int mei_hdcp_probe(struct mei_cl_device *cldev,
 			  const struct mei_cl_device_id *id)
 {
diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h
index c8f6fc90f475..560fc62b2b41 100644
--- a/include/linux/mei_hdcp.h
+++ b/include/linux/mei_hdcp.h
@@ -126,6 +126,8 @@ mei_repeater_check_flow_prepare_ack(struct mei_hdcp_data *data,
 				    struct hdcp2_rep_send_receiverid_list
 							*rep_topology,
 				    struct hdcp2_rep_send_ack *rep_send_ack);
+int mei_verify_mprime(struct mei_hdcp_data *data,
+		      struct hdcp2_rep_stream_ready *stream_ready);
 #else
 static inline
 int mei_hdcp_cldev_get_reference(void *client_data,
@@ -193,5 +195,11 @@ mei_repeater_check_flow_prepare_ack(struct mei_hdcp_data *data,
 {
 	return -ENODEV;
 }
+static inline
+int mei_verify_mprime(struct mei_hdcp_data *data,
+		      struct hdcp2_rep_stream_ready *stream_ready)
+{
+	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

  parent reply	other threads:[~2018-03-08 11:58 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08 11:58 [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Ramalingam C
2018-03-08 11:58 ` [PATCH v2 01/42] drm: hdcp2.2 authentication msg definitions Ramalingam C
2018-03-08 11:58 ` [PATCH v2 02/42] drm: HDMI and DP specific HDCP2.2 defines Ramalingam C
2018-03-08 11:58 ` [PATCH v2 03/42] mei: bus: whitelist hdcp client Ramalingam C
2018-03-08 11:58 ` [PATCH v2 04/42] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2018-03-08 13:07   ` Winkler, Tomas
2018-03-12 10:58     ` Ramalingam C
2018-03-12 11:22       ` Winkler, Tomas
2018-03-12 11:20         ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 05/42] misc/mei/hdcp: Add KBuild for mei hdcp driver Ramalingam C
2018-03-08 11:58 ` [PATCH v2 06/42] misc/mei/hdcp: Verify mei client device status Ramalingam C
2018-03-08 13:08   ` Winkler, Tomas
2018-03-12 11:02     ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 07/42] misc/mei/hdcp: Get & Put for mei cl_device Ramalingam C
2018-03-08 13:10   ` Winkler, Tomas
2018-03-12 11:35     ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 08/42] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2018-03-08 11:58 ` [PATCH v2 09/42] linux/mei: Header for mei_hdcp driver interface Ramalingam C
2018-03-08 13:13   ` Winkler, Tomas
2018-03-12 11:15     ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 10/42] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2018-03-08 13:17   ` Winkler, Tomas
2018-03-12 11:19     ` Ramalingam C
2018-03-12 11:32       ` Winkler, Tomas
2018-03-12 11:38         ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 11/42] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2018-03-08 11:58 ` [PATCH v2 12/42] misc/mei/hdcp: Verify H_prime Ramalingam C
2018-03-08 11:58 ` [PATCH v2 13/42] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C
2018-03-08 11:58 ` [PATCH v2 14/42] misc/mei/hdcp: Initiate Locality check Ramalingam C
2018-03-08 11:58 ` [PATCH v2 15/42] misc/mei/hdcp: Verify L_prime Ramalingam C
2018-03-08 11:58 ` [PATCH v2 16/42] misc/mei/hdcp: Prepare Session Key Ramalingam C
2018-03-08 11:58 ` [PATCH v2 17/42] misc/mei/hdcp: Repeater topology verifcation and ack Ramalingam C
2018-03-08 11:58 ` Ramalingam C [this message]
2018-03-08 11:58 ` [PATCH v2 19/42] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 20/42] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2018-03-08 11:58 ` [PATCH v2 21/42] drm/i915: wrapping all hdcp var into intel_hdcp Ramalingam C
2018-03-08 11:58 ` [PATCH v2 22/42] drm/i915: Define HDCP2.2 related variables Ramalingam C
2018-03-08 11:58 ` [PATCH v2 23/42] drm/i915: Define Intel HDCP2.2 registers Ramalingam C
2018-03-08 11:58 ` [PATCH v2 24/42] drm/i915: Wrappers for mei HDCP2.2 services Ramalingam C
2018-03-08 11:58 ` [PATCH v2 25/42] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 26/42] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 27/42] drm/i915: Enable and Disable HDCP2.2 port encryption Ramalingam C
2018-03-08 11:58 ` [PATCH v2 28/42] drm/i915: Implement HDCP2.2 En/Dis-able Ramalingam C
2018-03-08 11:58 ` [PATCH v2 29/42] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2018-03-08 11:58 ` [PATCH v2 30/42] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2018-03-08 11:58 ` [PATCH v2 31/42] drm/i915: Pullout the bksv read and validation Ramalingam C
2018-03-08 11:58 ` [PATCH v2 32/42] drm/i915: Initialize HDCP2.2 and its MEI interface Ramalingam C
2018-03-08 11:59 ` [PATCH v2 33/42] drm/i915: Schedule hdcp_check_link in _intel_hdcp_enable Ramalingam C
2018-03-08 11:59 ` [PATCH v2 34/42] drm/i915: Enable superior HDCP ver that is capable Ramalingam C
2018-03-08 11:59 ` [PATCH v2 35/42] drm/i915: Enable HDCP1.4 incase of HDCP2.2 failure Ramalingam C
2018-03-08 11:59 ` [PATCH v2 36/42] drm/i915: hdcp_check_link only on CP_IRQ Ramalingam C
2018-03-08 11:59 ` [PATCH v2 37/42] drm/i915: Check HDCP 1.4 and 2.2 link " Ramalingam C
2018-03-08 11:59 ` [PATCH v2 38/42] drm/i915: Implement gmbus burst read Ramalingam C
2018-03-08 11:59 ` [PATCH v2 39/42] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C
2018-03-08 11:59 ` [PATCH v2 40/42] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2018-03-08 11:59 ` [PATCH v2 41/42] drm/i915: Add HDCP2.2 support for DP connectors Ramalingam C
2018-03-08 11:59 ` [PATCH v2 42/42] drm/i915: Add HDCP2.2 support for HDMI connectors Ramalingam C
2018-03-08 12:30 ` [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Winkler, Tomas
2018-03-08 12:33   ` Ramalingam C
2018-03-09  9:26     ` Daniel Vetter
2018-03-08 12:49 ` ✗ Fi.CI.BAT: failure for drm/i915: Implement HDCP2.2 (rev2) Patchwork
2018-03-12 11:46 ` [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Ramalingam C

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=1520510349-8385-19-git-send-email-ramalingam.c@intel.com \
    --to=ramalingam.c@intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=seanpaul@chromium.org \
    --cc=tomas.winkler@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.