Message ID | 1548917996-28081-24-git-send-email-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Implement HDCP2.2 | expand |
> > ME FW is contributes a vital role in HDCP2.2 authentication. > HDCP2.2 driver needs to communicate to ME FW for each step of the > HDCP2.2 authentication. > > ME FW prepare and HDCP2.2 authentication parameters and encrypt them as > per spec. With such parameter Driver prepares HDCP2.2 auth messages and > communicate with HDCP2.2 sink. > > Similarly HDCP2. sink's response is shared with ME FW for decrypt and > verification. > > Once All the steps of HDCP2.2 authentications are complete on driver's request > ME FW will configure the port as authenticated and supply the HDCP keys to > the Gen HW for encryption. > > Only after this stage HDCP2.2 driver can start the HDCP2.2 encryption for a > port. > > ME FW is interfaced to kernel through MEI Bus Driver. To obtain the > HDCP2.2 services from the ME FW through MEI Bus driver MEI Client Driver is > developed. > > v2: > hdcp files are moved to drivers/misc/mei/hdcp/ [Tomas] > v3: > Squashed the Kbuild support [Tomas] > UUID renamed and Module License is modified [Tomas] > drv_data is set to null at remove [Tomas] > v4: > Module name is changed to "MEI HDCP" > I915 Selects the MEI_HDCP > v5: > Remove redundant text from the License header > Fix malformed licence > Removed the drv_data resetting. > v6: > K-Doc addition. [Tomas] > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> > --- > drivers/misc/mei/Kconfig | 7 +++++ > drivers/misc/mei/Makefile | 2 ++ > drivers/misc/mei/hdcp/Makefile | 7 +++++ > drivers/misc/mei/hdcp/mei_hdcp.c | 65 > ++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 81 insertions(+) > create mode 100644 drivers/misc/mei/hdcp/Makefile create mode 100644 > drivers/misc/mei/hdcp/mei_hdcp.c > > diff --git a/drivers/misc/mei/Kconfig b/drivers/misc/mei/Kconfig index > c49e1d2269af..9c518b7f0011 100644 > --- a/drivers/misc/mei/Kconfig > +++ b/drivers/misc/mei/Kconfig > @@ -43,3 +43,10 @@ config INTEL_MEI_TXE > > Supported SoCs: > Intel Bay Trail > + > +config INTEL_MEI_HDCP > + tristate "Intel HDCP2.2 services of ME Interface" > + select INTEL_MEI_ME > + depends on DRM_I915 > + help > + MEI Support for HDCP2.2 Services on Intel SoCs. > diff --git a/drivers/misc/mei/Makefile b/drivers/misc/mei/Makefile index > d9215fc4e499..8c2d9565a4cb 100644 > --- a/drivers/misc/mei/Makefile > +++ b/drivers/misc/mei/Makefile > @@ -24,3 +24,5 @@ mei-txe-objs += hw-txe.o > > mei-$(CONFIG_EVENT_TRACING) += mei-trace.o CFLAGS_mei-trace.o = - > I$(src) > + > +obj-$(CONFIG_INTEL_MEI_HDCP) += hdcp/ > diff --git a/drivers/misc/mei/hdcp/Makefile b/drivers/misc/mei/hdcp/Makefile > new file mode 100644 index 000000000000..b2de072aa0de > --- /dev/null > +++ b/drivers/misc/mei/hdcp/Makefile > @@ -0,0 +1,7 @@ > +# SPDX-License-Identifier: GPL-2.0+ > +# > +# Copyright (c) 2017-2018, Intel Corporation. > +# > +# Makefile - HDCP client driver for Intel MEI Bus Driver. > + > +obj-$(CONFIG_INTEL_MEI_HDCP) += mei_hdcp.o > diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c > b/drivers/misc/mei/hdcp/mei_hdcp.c > new file mode 100644 > index 000000000000..ca5010ad7dd7 > --- /dev/null > +++ b/drivers/misc/mei/hdcp/mei_hdcp.c > @@ -0,0 +1,65 @@ > +// SPDX-License-Identifier: (GPL-2.0+) GPL-2.0 (drop +) > +/* > + * Copyright © 2017-2018 Intel Corporation > + * > + * Mei_hdcp.c: HDCP client driver for mei bus > + * > + * Authors: > + * Ramalingam C <ramalingam.c@intel.com> */ > + > +/** > + * DOC: MEI_HDCP Client Driver > + * > + * This is a client driver to the mei_bus to make the HDCP2.2 services > +of > + * ME FW available for the interested consumers like I915. > + * > + * This module will act as a translation layer between HDCP protocol > + * implementor(I915) and ME FW by translating HDCP2.2 authentication > + * messages to ME FW command payloads and vice versa. > + */ > + > +#include <linux/module.h> > +#include <linux/slab.h> > +#include <linux/uuid.h> > +#include <linux/mei_cl_bus.h> > + > +static int mei_hdcp_probe(struct mei_cl_device *cldev, > + const struct mei_cl_device_id *id) { > + int ret; > + > + ret = mei_cldev_enable(cldev); > + if (ret < 0) > + dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret); > + > + return ret; > +} > + > +static int mei_hdcp_remove(struct mei_cl_device *cldev) { > + return mei_cldev_disable(cldev); > +} > + > +#define MEI_UUID_HDCP UUID_LE(0xB638AB7E, 0x94E2, > 0x4EA2, 0xA5, \ > + 0x52, 0xD1, 0xC5, 0x4B, \ > + 0x62, 0x7F, 0x04) Should be now moving to GUID_INIT from UUID_LE() Thought it may be done later. > +static struct mei_cl_device_id mei_hdcp_tbl[] = { > + { .uuid = MEI_UUID_HDCP, .version = MEI_CL_VERSION_ANY }, > + { } > +}; > +MODULE_DEVICE_TABLE(mei, mei_hdcp_tbl); > + > +static struct mei_cl_driver mei_hdcp_driver = { > + .id_table = mei_hdcp_tbl, > + .name = KBUILD_MODNAME, > + .probe = mei_hdcp_probe, > + .remove = mei_hdcp_remove, > +}; > + > +module_mei_cl_driver(mei_hdcp_driver); > + > +MODULE_AUTHOR("Intel Corporation"); > +MODULE_LICENSE("GPL"); > +MODULE_DESCRIPTION("MEI HDCP"); > -- > 2.7.4
diff --git a/drivers/misc/mei/Kconfig b/drivers/misc/mei/Kconfig index c49e1d2269af..9c518b7f0011 100644 --- a/drivers/misc/mei/Kconfig +++ b/drivers/misc/mei/Kconfig @@ -43,3 +43,10 @@ config INTEL_MEI_TXE Supported SoCs: Intel Bay Trail + +config INTEL_MEI_HDCP + tristate "Intel HDCP2.2 services of ME Interface" + select INTEL_MEI_ME + depends on DRM_I915 + help + MEI Support for HDCP2.2 Services on Intel SoCs. diff --git a/drivers/misc/mei/Makefile b/drivers/misc/mei/Makefile index d9215fc4e499..8c2d9565a4cb 100644 --- a/drivers/misc/mei/Makefile +++ b/drivers/misc/mei/Makefile @@ -24,3 +24,5 @@ mei-txe-objs += hw-txe.o mei-$(CONFIG_EVENT_TRACING) += mei-trace.o CFLAGS_mei-trace.o = -I$(src) + +obj-$(CONFIG_INTEL_MEI_HDCP) += hdcp/ diff --git a/drivers/misc/mei/hdcp/Makefile b/drivers/misc/mei/hdcp/Makefile new file mode 100644 index 000000000000..b2de072aa0de --- /dev/null +++ b/drivers/misc/mei/hdcp/Makefile @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (c) 2017-2018, Intel Corporation. +# +# Makefile - HDCP client driver for Intel MEI Bus Driver. + +obj-$(CONFIG_INTEL_MEI_HDCP) += mei_hdcp.o diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c new file mode 100644 index 000000000000..ca5010ad7dd7 --- /dev/null +++ b/drivers/misc/mei/hdcp/mei_hdcp.c @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: (GPL-2.0+) +/* + * Copyright © 2017-2018 Intel Corporation + * + * Mei_hdcp.c: HDCP client driver for mei bus + * + * Authors: + * Ramalingam C <ramalingam.c@intel.com> + */ + +/** + * DOC: MEI_HDCP Client Driver + * + * This is a client driver to the mei_bus to make the HDCP2.2 services of + * ME FW available for the interested consumers like I915. + * + * This module will act as a translation layer between HDCP protocol + * implementor(I915) and ME FW by translating HDCP2.2 authentication + * messages to ME FW command payloads and vice versa. + */ + +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/uuid.h> +#include <linux/mei_cl_bus.h> + +static int mei_hdcp_probe(struct mei_cl_device *cldev, + const struct mei_cl_device_id *id) +{ + int ret; + + ret = mei_cldev_enable(cldev); + if (ret < 0) + dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret); + + return ret; +} + +static int mei_hdcp_remove(struct mei_cl_device *cldev) +{ + return mei_cldev_disable(cldev); +} + +#define MEI_UUID_HDCP UUID_LE(0xB638AB7E, 0x94E2, 0x4EA2, 0xA5, \ + 0x52, 0xD1, 0xC5, 0x4B, \ + 0x62, 0x7F, 0x04) + +static struct mei_cl_device_id mei_hdcp_tbl[] = { + { .uuid = MEI_UUID_HDCP, .version = MEI_CL_VERSION_ANY }, + { } +}; +MODULE_DEVICE_TABLE(mei, mei_hdcp_tbl); + +static struct mei_cl_driver mei_hdcp_driver = { + .id_table = mei_hdcp_tbl, + .name = KBUILD_MODNAME, + .probe = mei_hdcp_probe, + .remove = mei_hdcp_remove, +}; + +module_mei_cl_driver(mei_hdcp_driver); + +MODULE_AUTHOR("Intel Corporation"); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("MEI HDCP");