[PATCH v6 23/35] misc/mei/hdcp: Component framework for I915 Interface
Shankar, Uma
uma.shankar at intel.com
Wed Aug 1 13:06:54 UTC 2018
>-----Original Message-----
>From: C, Ramalingam
>Sent: Saturday, July 14, 2018 8:45 AM
>To: intel-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org;
>daniel at ffwll.ch; seanpaul at chromium.org; Winkler, Tomas
><tomas.winkler at intel.com>; Usyskin, Alexander <alexander.usyskin at intel.com>;
>Shankar, Uma <uma.shankar at intel.com>
>Cc: Sharma, Shashank <shashank.sharma at intel.com>; C, Ramalingam
><ramalingam.c at intel.com>
>Subject: [PATCH v6 23/35] misc/mei/hdcp: Component framework for I915
>Interface
>
>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.
>
>Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
>---
> drivers/misc/mei/hdcp/mei_hdcp.c | 89
>+++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 87 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>b/drivers/misc/mei/hdcp/mei_hdcp.c
>index 4cd6fdd01181..adfb14a2ea4f 100644
>--- a/drivers/misc/mei/hdcp/mei_hdcp.c
>+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>@@ -31,6 +31,80 @@
> #include <linux/slab.h>
> #include <linux/uuid.h>
> #include <linux/mei_cl_bus.h>
>+#include <linux/component.h>
>+#include <drm/i915_component.h>
>+
>+bool mei_hdcp_component_registered;
Make this static.
>+static struct mei_cl_device *mei_cldev;
>+
>+struct i915_hdcp_component_ops mei_hdcp_component_ops = {
>+ .owner = THIS_MODULE,
>+ .initiate_hdcp2_session = NULL,
>+ .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_component_bind(struct device *mei_kdev,
>+ struct device *i915_kdev, void *data) {
>+ struct i915_component_master *comp = data;
>+
>+ dev_info(mei_kdev, "MEI HDCP comp bind\n");
>+ WARN_ON(comp->hdcp_ops);
>+
>+ comp->hdcp_ops = &mei_hdcp_component_ops;
>+ comp->i915_kdev = i915_kdev;
>+ comp->mei_cldev = mei_cldev;
>+ mei_cldev_set_drvdata(mei_cldev, (void *)comp);
>+
>+ return 0;
>+}
>+
>+static void mei_hdcp_component_unbind(struct device *mei_kdev,
>+ struct device *i915_kdev, void *data) {
>+ struct i915_component_master *comp = data;
>+
>+ dev_info(mei_kdev, "MEI HDCP comp unbind\n");
>+ comp->hdcp_ops = NULL;
>+ comp->mei_cldev = NULL;
>+}
>+
>+static const struct component_ops mei_hdcp_component_bind_ops = {
>+ .bind = mei_hdcp_component_bind,
>+ .unbind = mei_hdcp_component_unbind,
>+};
>+
>+void mei_hdcp_component_init(struct device *dev) {
>+ int ret;
>+
>+ dev_err(dev, "MEI HDCP comp init\n");
>+ ret = component_add(dev, &mei_hdcp_component_bind_ops);
>+ if (ret < 0) {
>+ dev_err(dev, "Failed to add MEI HDCP comp (%d)\n", ret);
>+ return;
>+ }
>+
>+ mei_hdcp_component_registered = true;
>+}
>+
>+void mei_hdcp_component_cleanup(struct device *dev) {
>+ if (!mei_hdcp_component_registered)
>+ return;
>+
>+ component_del(dev, &mei_hdcp_component_bind_ops);
>+ mei_hdcp_component_registered = false; }
>
> static int mei_hdcp_probe(struct mei_cl_device *cldev,
> const struct mei_cl_device_id *id) @@ -38,15 +112,26
>@@ static int mei_hdcp_probe(struct mei_cl_device *cldev,
> int ret;
>
> ret = mei_cldev_enable(cldev);
>- if (ret < 0)
>+ if (ret < 0) {
> dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret);
>+ return ret;
>+ }
>
>- return ret;
>+ mei_cldev = cldev;
>+ mei_hdcp_component_init(&cldev->dev);
Leave a blank line here.
With the above fixed.
Reviewed-by: Uma Shankar <uma.shankar at intel.com>
>+ return 0;
> }
>
> static int mei_hdcp_remove(struct mei_cl_device *cldev) {
>+ struct i915_hdcp_component *comp;
>+
>+ comp = mei_cldev_get_drvdata(cldev);
>+ mei_hdcp_component_cleanup(&cldev->dev);
>+
>+ mei_cldev = NULL;
> mei_cldev_set_drvdata(cldev, NULL);
>+
> return mei_cldev_disable(cldev);
> }
>
>--
>2.7.4
More information about the dri-devel
mailing list