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,
	daniel.vetter@ffwll.ch, tomas.winkler@intel.com,
	uma.shankar@intel.com
Subject: [PATCH v14 28/32] misc/mei/hdcp: Verify M_prime
Date: Sat, 16 Feb 2019 02:21:17 +0530	[thread overview]
Message-ID: <1550263881-16082-29-git-send-email-ramalingam.c@intel.com> (raw)
In-Reply-To: <1550263881-16082-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.
v3:
  cldev is passed as first parameter [Tomas]
  Redundant comments and cast are removed [Tomas]
v4:
  %zd for ssize_t [Alexander]
  %s/return -1/return -EIO [Alexander]
  endianness conversion func is moved to drm_hdcp.h [Uma]
v5: Rebased.
v6:
  Collected the Rb-ed by.
  Rebasing.
v7:
  Adjust to the new mei interface.
  Fix for Kdoc.
v8:
  K-Doc addition. [Tomas]
  drm_hdcp2_u32_to_seq_num() is used for u32 to seq_num.
v9:
  renamed func as mei_hdcp_* [Tomas]
  Inline function is defined for DDI index [Tomas]
v10:
  K-Doc fix. [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 | 67 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index c06a9805ac85..721376fc9bf1 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -540,6 +540,71 @@ mei_hdcp_repeater_check_flow_prepare_ack(struct device *dev,
 	return 0;
 }
 
+/**
+ * mei_hdcp_verify_mprime() - Verify mprime.
+ * @dev: device corresponding to the mei_cl_device
+ * @data: Intel HW specific hdcp data
+ * @stream_ready: RepeaterAuth_Stream_Ready msg for ME FW verification.
+ *
+ * Return: 0 on Success, <0 on Failure
+ */
+static int mei_hdcp_verify_mprime(struct device *dev,
+				  struct hdcp_port_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 } };
+	struct mei_cl_device *cldev;
+	ssize_t byte;
+
+	if (!dev || !stream_ready || !data)
+		return -EINVAL;
+
+	cldev = to_mei_cl_device(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 = mei_get_ddi_index(data->port);
+
+	memcpy(verify_mprime_in.m_prime, stream_ready->m_prime,
+	       HDCP_2_2_MPRIME_LEN);
+	drm_hdcp2_u32_to_seq_num(verify_mprime_in.seq_num_m, 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);
+
+	byte = mei_cldev_send(cldev, (u8 *)&verify_mprime_in,
+			      sizeof(verify_mprime_in));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte);
+		return byte;
+	}
+
+	byte = mei_cldev_recv(cldev, (u8 *)&verify_mprime_out,
+			      sizeof(verify_mprime_out));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_recv failed. %zd\n", byte);
+		return byte;
+	}
+
+	if (verify_mprime_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
+			WIRED_REPEATER_AUTH_STREAM_REQ,
+			verify_mprime_out.header.status);
+		return -EIO;
+	}
+
+	return 0;
+}
+
 static __attribute__((unused))
 struct i915_hdcp_component_ops mei_hdcp_ops = {
 	.owner = THIS_MODULE,
@@ -553,7 +618,7 @@ struct i915_hdcp_component_ops mei_hdcp_ops = {
 	.get_session_key = mei_hdcp_get_session_key,
 	.repeater_check_flow_prepare_ack =
 				mei_hdcp_repeater_check_flow_prepare_ack,
-	.verify_mprime = NULL,
+	.verify_mprime = mei_hdcp_verify_mprime,
 	.enable_hdcp_authentication = NULL,
 	.close_hdcp_session = NULL,
 };
-- 
2.7.4

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

  parent reply	other threads:[~2019-02-15 20:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-15 20:50 [PATCH v14 00/32] drm/i915: Implement HDCP2.2 Ramalingam C
2019-02-15 20:50 ` [PATCH v14 01/32] drm/i915: Gathering the HDCP1.4 routines together Ramalingam C
2019-02-15 20:50 ` [PATCH v14 02/32] drm/i915: Initialize HDCP2.2 Ramalingam C
2019-02-15 20:50 ` [PATCH v14 03/32] drm/i915: MEI interface implementation Ramalingam C
2019-02-16  1:40   ` [Intel-gfx] " kbuild test robot via dri-devel
2019-02-16  3:28   ` kbuild test robot via dri-devel
2019-02-15 20:50 ` [PATCH v14 04/32] drm/i915: hdcp1.4 CP_IRQ handling and SW encryption tracking Ramalingam C
2019-02-15 20:50 ` [PATCH v14 05/32] drm/i915: Enable and Disable of HDCP2.2 Ramalingam C
2019-02-15 20:50 ` [PATCH v14 06/32] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2019-02-15 20:50 ` [PATCH v14 07/32] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2019-02-15 20:50 ` [PATCH v14 08/32] drm: HDCP2.2 link check period Ramalingam C
2019-02-15 20:50 ` [PATCH v14 09/32] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2019-02-15 20:50 ` [PATCH v14 10/32] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2019-02-15 20:51 ` [PATCH v14 11/32] drm: removing the DP Errata msg and its msg id Ramalingam C
2019-02-15 20:51 ` [PATCH v14 12/32] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C
2019-02-15 20:51 ` [PATCH v14 13/32] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2019-02-15 20:51 ` [PATCH v14 14/32] drm/i915: CP_IRQ handling for DP HDCP2.2 msgs Ramalingam C
2019-02-15 20:51 ` [PATCH v14 15/32] drm/i915: Fix KBL HDCP2.2 encrypt status signalling Ramalingam C
2019-02-15 20:51 ` [PATCH v14 16/32] mei: bus: whitelist hdcp client Ramalingam C
2019-02-15 20:51 ` [PATCH v14 17/32] mei: bus: export to_mei_cl_device for mei client device drivers Ramalingam C
2019-02-15 20:51 ` [PATCH v14 18/32] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2019-02-15 20:51 ` [PATCH v14 19/32] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2019-02-15 20:51 ` [PATCH v14 20/32] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2019-02-16  2:43   ` kbuild test robot
2019-02-15 20:51 ` [PATCH v14 21/32] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2019-02-15 20:51 ` [PATCH v14 22/32] misc/mei/hdcp: Verify H_prime Ramalingam C
2019-02-15 20:51 ` [PATCH v14 23/32] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C
2019-02-15 20:51 ` [PATCH v14 24/32] misc/mei/hdcp: Initiate Locality check Ramalingam C
2019-02-15 20:51 ` [PATCH v14 25/32] misc/mei/hdcp: Verify L_prime Ramalingam C
2019-02-15 20:51 ` [PATCH v14 26/32] misc/mei/hdcp: Prepare Session Key Ramalingam C
2019-02-15 20:51 ` [PATCH v14 27/32] misc/mei/hdcp: Repeater topology verification and ack Ramalingam C
2019-02-15 20:51 ` Ramalingam C [this message]
2019-02-15 20:51 ` [PATCH v14 29/32] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C
2019-02-15 20:51 ` [PATCH v14 30/32] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2019-02-15 20:51 ` [PATCH v14 31/32] misc/mei/hdcp: Component framework for I915 Interface Ramalingam C
2019-02-15 20:51 ` [PATCH v14 32/32] FOR_TEST_ONLY: i915/Kconfig: Select mei_hdcp by I915 Ramalingam C
2019-02-15 23:30 ` ✗ Fi.CI.BAT: failure for drm/i915: Implement HDCP2.2 Patchwork
2019-02-16  4:52 ` [PATCH v14] drm/audio: declaration of struct device 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=1550263881-16082-29-git-send-email-ramalingam.c@intel.com \
    --to=ramalingam.c@intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.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.