From: Ramalingam C <ramalingam.c@intel.com>
To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: alexander.usyskin@intel.com, uma.shankar@intel.com,
tomas.winkler@intel.com
Subject: [PATCH v4 17/41] misc/mei/hdcp: Enabling the HDCP authentication
Date: Mon, 21 May 2018 18:23:36 +0530 [thread overview]
Message-ID: <1526907240-17639-18-git-send-email-ramalingam.c@intel.com> (raw)
In-Reply-To: <1526907240-17639-1-git-send-email-ramalingam.c@intel.com>
Request to ME to configure a port as authenticated.
On Success, ME FW will mark the port as authenticated and provides
HDCP cipher with the encryption keys.
Enabling the Authentication can be requested once all stages of
HDCP2.2 authentication is completed by interacting 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]
v4:
%zd for ssize_t [Alexander]
%s/return -1/return -EIO [Alexander]
Style and typos fixed [Uma]
Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
---
drivers/misc/mei/hdcp/mei_hdcp.c | 55 ++++++++++++++++++++++++++++++++++++++++
include/linux/mei_hdcp.h | 7 +++++
2 files changed, 62 insertions(+)
diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 32a039d46738..cbd3a8a3ae3e 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -627,6 +627,61 @@ 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. %zd\n", 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. %zd\n", 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 -EIO;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(mei_enable_hdcp_authentication);
+
static void
mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)
{
diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h
index e7e1e86c6663..e6b6f9ace0c2 100644
--- a/include/linux/mei_hdcp.h
+++ b/include/linux/mei_hdcp.h
@@ -137,6 +137,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 inline int mei_cldev_register_notify(struct notifier_block *nb)
{
@@ -214,5 +216,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 /* IS_ENABLED(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
next prev parent reply other threads:[~2018-05-21 12:53 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-21 12:53 [PATCH v4 00/41] drm/i915: Implement HDCP2.2 Ramalingam C
2018-05-21 12:53 ` [PATCH v4 01/41] drm: hdcp2.2 authentication msg definitions Ramalingam C
2018-05-21 12:53 ` [PATCH v4 02/41] drm: HDMI and DP specific HDCP2.2 defines Ramalingam C
2018-05-21 12:53 ` [PATCH v4 03/41] mei: bus: whitelist hdcp client Ramalingam C
2018-05-21 12:53 ` [PATCH v4 04/41] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2018-05-21 12:53 ` [PATCH v4 05/41] misc/mei/hdcp: Notifier chain for mei cldev state change Ramalingam C
2018-05-21 12:53 ` [PATCH v4 06/41] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2018-05-21 12:53 ` [PATCH v4 07/41] linux/mei: Header for mei_hdcp driver interface Ramalingam C
2018-05-21 12:53 ` [PATCH v4 08/41] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2018-05-21 12:53 ` [PATCH v4 09/41] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2018-05-21 12:53 ` [PATCH v4 10/41] misc/mei/hdcp: Verify H_prime Ramalingam C
2018-05-21 12:53 ` [PATCH v4 11/41] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C
2018-05-21 12:53 ` [PATCH v4 12/41] misc/mei/hdcp: Initiate Locality check Ramalingam C
2018-05-21 12:53 ` [PATCH v4 13/41] misc/mei/hdcp: Verify L_prime Ramalingam C
2018-05-21 12:53 ` [PATCH v4 14/41] misc/mei/hdcp: Prepare Session Key Ramalingam C
2018-05-21 12:53 ` [PATCH v4 15/41] misc/mei/hdcp: Repeater topology verification and ack Ramalingam C
2018-05-21 12:53 ` [PATCH v4 16/41] misc/mei/hdcp: Verify M_prime Ramalingam C
2018-05-21 12:53 ` Ramalingam C [this message]
2018-05-21 12:53 ` [PATCH v4 18/41] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2018-05-21 12:53 ` [PATCH v4 19/41] drm/i915: wrapping all hdcp var into intel_hdcp Ramalingam C
2018-05-21 12:53 ` [PATCH v4 20/41] drm/i915: Define HDCP2.2 related variables Ramalingam C
2018-05-21 12:53 ` [PATCH v4 21/41] drm/i915: Define Intel HDCP2.2 registers Ramalingam C
2018-05-21 12:53 ` [PATCH v4 22/41] drm/i915: Wrappers for mei HDCP2.2 services Ramalingam C
2018-05-31 7:07 ` Daniel Vetter
2018-06-20 6:46 ` Ramalingam C
2018-05-21 12:53 ` [PATCH v4 23/41] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2018-05-21 12:53 ` [PATCH v4 24/41] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2018-05-23 18:35 ` kbuild test robot
2018-05-21 12:53 ` [PATCH v4 25/41] drm/i915: Enable and Disable HDCP2.2 port encryption Ramalingam C
2018-05-31 7:09 ` Daniel Vetter
2018-06-20 6:49 ` Ramalingam C
2018-05-21 12:53 ` [PATCH v4 26/41] drm/i915: Implement HDCP2.2 En/Dis-able Ramalingam C
2018-05-21 12:53 ` [PATCH v4 27/41] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2018-05-21 12:53 ` [PATCH v4 28/41] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2018-05-21 12:53 ` [PATCH v4 29/41] drm/i915: Pullout the bksv read and validation Ramalingam C
2018-05-21 12:53 ` [PATCH v4 30/41] drm/i915: Initialize HDCP2.2 and its MEI interface Ramalingam C
2018-05-24 8:06 ` Daniel Vetter
2018-05-25 11:12 ` Ramalingam C
2018-05-29 6:53 ` Daniel Vetter
2018-05-29 8:42 ` Daniel Vetter
2018-05-29 9:27 ` Ramalingam C
2018-05-21 12:53 ` [PATCH v4 31/41] drm/i915: Schedule hdcp_check_link in _intel_hdcp_enable Ramalingam C
2018-05-21 12:53 ` [PATCH v4 32/41] drm/i915: Enable superior HDCP ver that is capable Ramalingam C
2018-05-21 12:53 ` [PATCH v4 33/41] drm/i915: Enable HDCP1.4 incase of HDCP2.2 failure Ramalingam C
2018-05-21 12:53 ` [PATCH v4 34/41] drm/i915: hdcp_check_link only on CP_IRQ Ramalingam C
2018-05-21 12:53 ` [PATCH v4 35/41] drm/i915: Check HDCP 1.4 and 2.2 link " Ramalingam C
2018-05-21 12:53 ` [PATCH v4 36/41] drm/i915/gmbus: Increase the Bytes per Rd/Wr Op Ramalingam C
2018-05-21 12:53 ` [PATCH v4 37/41] drm/i915/gmbus: Enable burst read Ramalingam C
2018-05-21 12:53 ` [PATCH v4 38/41] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C
2018-05-22 20:52 ` [Intel-gfx] " kbuild test robot
2018-05-22 21:33 ` kbuild test robot
2018-05-31 7:22 ` Daniel Vetter
2018-06-20 10:19 ` Ramalingam C
2018-06-20 11:43 ` Daniel Vetter
2018-06-20 11:55 ` C, Ramalingam
2018-05-21 12:53 ` [PATCH v4 39/41] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2018-05-31 7:24 ` Daniel Vetter
2018-06-20 10:19 ` Ramalingam C
2018-05-21 12:53 ` [PATCH v4 40/41] drm/i915: Add HDCP2.2 support for DP connectors Ramalingam C
2018-05-21 12:54 ` [PATCH v4 41/41] drm/i915: Add HDCP2.2 support for HDMI connectors Ramalingam C
2018-05-29 6:57 ` [PATCH v4 00/41] drm/i915: Implement HDCP2.2 Daniel Vetter
2018-05-29 7:51 ` C, Ramalingam
2018-05-29 8:30 ` Daniel Vetter
2018-05-29 9:40 ` C, Ramalingam
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=1526907240-17639-18-git-send-email-ramalingam.c@intel.com \
--to=ramalingam.c@intel.com \
--cc=alexander.usyskin@intel.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).