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 34/35] misc/mei/hdcp: Component framework for I915 Interface
Date: Fri, 15 Feb 2019 14:05:29 +0530	[thread overview]
Message-ID: <1550219730-17734-35-git-send-email-ramalingam.c@intel.com> (raw)
In-Reply-To: <1550219730-17734-1-git-send-email-ramalingam.c@intel.com>

Mei hdcp driver is designed as component slave for the I915 component
master.

v2: Rebased.
v3:
  Notifier chain is adopted for cldev state update [Tomas]
v4:
  Made static dummy functions as inline in mei_hdcp.h
  API for polling client device status
  IS_ENABLED used in header, for config status for mei_hdcp.
v5:
  Replacing the notifier with component framework. [Daniel]
v6:
  Rebased on the I915 comp master redesign.
v7:
  mei_hdcp_component_registered is made static [Uma]
  Need for global static variable mei_cldev is removed.
v8:
  master comp is added to be matched with i915 subcomponent [daniel]
v9:
  only comp_master is set and retrieved as driver_data [Daniel]
  Reviewed-by Daniel.
v10:
  small corrections at probe [Tomas]

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/misc/mei/hdcp/mei_hdcp.c | 82 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 80 insertions(+), 2 deletions(-)

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 2afc7d31dacc..ad55b41550d6 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -23,6 +23,7 @@
 #include <linux/slab.h>
 #include <linux/uuid.h>
 #include <linux/mei_cl_bus.h>
+#include <linux/component.h>
 #include <drm/drm_connector.h>
 #include <drm/i915_component.h>
 #include <drm/i915_mei_hdcp_interface.h>
@@ -711,8 +712,7 @@ mei_hdcp_close_session(struct device *dev, struct hdcp_port_data *data)
 	return 0;
 }
 
-static __attribute__((unused))
-struct i915_hdcp_component_ops mei_hdcp_ops = {
+static struct i915_hdcp_component_ops mei_hdcp_ops = {
 	.owner = THIS_MODULE,
 	.initiate_hdcp2_session = mei_hdcp_initiate_session,
 	.verify_receiver_cert_prepare_km =
@@ -729,20 +729,98 @@ struct i915_hdcp_component_ops mei_hdcp_ops = {
 	.close_hdcp_session = mei_hdcp_close_session,
 };
 
+static int mei_component_master_bind(struct device *dev)
+{
+	struct mei_cl_device *cldev = to_mei_cl_device(dev);
+	struct i915_hdcp_comp_master *comp_master =
+						mei_cldev_get_drvdata(cldev);
+	int ret;
+
+	dev_info(dev, "%s\n", __func__);
+	comp_master->ops = &mei_hdcp_ops;
+	comp_master->mei_dev = dev;
+	ret = component_bind_all(dev, comp_master);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+static void mei_component_master_unbind(struct device *dev)
+{
+	struct mei_cl_device *cldev = to_mei_cl_device(dev);
+	struct i915_hdcp_comp_master *comp_master =
+						mei_cldev_get_drvdata(cldev);
+
+	dev_info(dev, "%s\n", __func__);
+	component_unbind_all(dev, comp_master);
+}
+
+static const struct component_master_ops mei_component_master_ops = {
+	.bind = mei_component_master_bind,
+	.unbind = mei_component_master_unbind,
+};
+
+static int mei_hdcp_component_match(struct device *dev, int subcomponent,
+				    void *data)
+{
+	return !strcmp(dev->driver->name, "i915") &&
+	       subcomponent == I915_COMPONENT_HDCP;
+}
+
 static int mei_hdcp_probe(struct mei_cl_device *cldev,
 			  const struct mei_cl_device_id *id)
 {
+	struct i915_hdcp_comp_master *comp_master;
+	struct component_match *master_match;
 	int ret;
 
 	ret = mei_cldev_enable(cldev);
 	if (ret < 0)
 		dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret);
 
+	comp_master = kzalloc(sizeof(*comp_master), GFP_KERNEL);
+	if (!comp_master) {
+		ret = -ENOMEM;
+		goto err_exit;
+	}
+
+	master_match = NULL;
+	component_match_add_typed(&cldev->dev, &master_match,
+				  mei_hdcp_component_match, comp_master);
+	if (IS_ERR_OR_NULL(master_match)) {
+		ret = -ENOMEM;
+		goto err_exit;
+	}
+
+	mei_cldev_set_drvdata(cldev, comp_master);
+	ret = component_master_add_with_match(&cldev->dev,
+					      &mei_component_master_ops,
+					      master_match);
+	if (ret < 0) {
+		dev_err(&cldev->dev, "Master comp add failed %d\n", ret);
+		goto err_exit;
+	}
+
+	return 0;
+
+err_exit:
+	mei_cldev_set_drvdata(cldev, NULL);
+	kfree(comp_master);
+	mei_cldev_disable(cldev);
+
 	return ret;
 }
 
 static int mei_hdcp_remove(struct mei_cl_device *cldev)
 {
+	struct i915_hdcp_comp_master *comp_master =
+						mei_cldev_get_drvdata(cldev);
+
+	component_master_del(&cldev->dev, &mei_component_master_ops);
+	kfree(comp_master);
+	mei_cldev_set_drvdata(cldev, NULL);
+
 	return mei_cldev_disable(cldev);
 }
 
-- 
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  8:35 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-15  8:34 [PATCH v14 00/35] drm/i915: Implement HDCP2.2 Ramalingam C
2019-02-15  8:34 ` [PATCH v14 01/35] drm/i915: Gathering the HDCP1.4 routines together Ramalingam C
2019-02-15  8:34 ` [PATCH v14 02/35] drm: enum port definition is moved into i915_drm.h Ramalingam C
2019-02-15 17:47   ` Daniel Vetter
2019-02-15  8:34 ` [PATCH v14 03/35] drm: header for i915 - MEI_HDCP interface Ramalingam C
2019-02-15 17:47   ` Daniel Vetter
2019-02-15  8:34 ` [PATCH v14 04/35] drm/i915: Initialize HDCP2.2 Ramalingam C
2019-02-15  8:35 ` [PATCH v14 05/35] drm/i915: MEI interface definition Ramalingam C via dri-devel
2019-02-15 17:53   ` Daniel Vetter
2019-02-15  8:35 ` [PATCH v14 06/35] drm/i915: hdcp1.4 CP_IRQ handling and SW encryption tracking Ramalingam C
2019-02-15  8:35 ` [PATCH v14 07/35] drm/i915: Enable and Disable of HDCP2.2 Ramalingam C
2019-02-15  8:35 ` [PATCH v14 08/35] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2019-02-15  8:35 ` [PATCH v14 09/35] drm: helper functions for hdcp2 seq_num to from u32 Ramalingam C
2019-02-15 17:56   ` Daniel Vetter
2019-02-15  8:35 ` [PATCH v14 10/35] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2019-02-15  8:35 ` [PATCH v14 11/35] drm: HDCP2.2 link check period Ramalingam C
2019-02-15  8:35 ` [PATCH v14 12/35] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2019-02-15  8:35 ` [PATCH v14 13/35] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2019-02-15  8:35 ` [PATCH v14 14/35] drm: removing the DP Errata msg and its msg id Ramalingam C
2019-02-15  8:35 ` [PATCH v14 15/35] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C via dri-devel
2019-02-15  8:35 ` [PATCH v14 16/35] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2019-02-15  8:35 ` [PATCH v14 17/35] drm/i915: CP_IRQ handling for DP HDCP2.2 msgs Ramalingam C
2019-02-15  8:35 ` [PATCH v14 18/35] drm/i915: Fix KBL HDCP2.2 encrypt status signalling Ramalingam C via dri-devel
2019-02-15  8:35 ` [PATCH v14 19/35] mei: bus: whitelist hdcp client Ramalingam C
2019-02-15  8:35 ` [PATCH v14 20/35] mei: bus: export to_mei_cl_device for mei client device drivers Ramalingam C
2019-02-15  8:35 ` [PATCH v14 21/35] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2019-02-15  8:35 ` [PATCH v14 22/35] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2019-02-15  8:35 ` [PATCH v14 23/35] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2019-02-15  8:35 ` [PATCH v14 24/35] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2019-02-15  8:35 ` [PATCH v14 25/35] misc/mei/hdcp: Verify H_prime Ramalingam C
2019-02-15  8:35 ` [PATCH v14 26/35] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C via dri-devel
2019-02-15  8:35 ` [PATCH v14 27/35] misc/mei/hdcp: Initiate Locality check Ramalingam C
2019-02-15  8:35 ` [PATCH v14 28/35] misc/mei/hdcp: Verify L_prime Ramalingam C
2019-02-15  8:35 ` [PATCH v14 29/35] misc/mei/hdcp: Prepare Session Key Ramalingam C
2019-02-15  8:35 ` [PATCH v14 30/35] misc/mei/hdcp: Repeater topology verification and ack Ramalingam C
2019-02-15  8:35 ` [PATCH v14 31/35] misc/mei/hdcp: Verify M_prime Ramalingam C
2019-02-15  8:35 ` [PATCH v14 32/35] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C via dri-devel
2019-02-15  8:35 ` [PATCH v14 33/35] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2019-02-15  8:35 ` Ramalingam C [this message]
2019-02-15  8:35 ` [PATCH v14 35/35] FOR_TEST_ONLY: i915/Kconfig: Select mei_hdcp by I915 Ramalingam C
2019-02-16 20:46 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Implement HDCP2.2 Patchwork
2019-02-16 20:56 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-02-16 21:07 ` ✗ Fi.CI.BAT: 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=1550219730-17734-35-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.