Message ID | 1550338640-17470-20-git-send-email-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Implement HDCP2.2 | expand |
> > ME FW 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.2 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] > v7: > %s/UUID_LE/GUID_INIT [Tomas] > GPL Ver is 2.0 than 2.0+ [Tomas] > > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> > Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> > Acked-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 | 64 > ++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 80 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..64a7b3483895 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 platforms. Usually we need around 4 lines of doc, When this should be selected?
diff --git a/drivers/misc/mei/Kconfig b/drivers/misc/mei/Kconfig index c49e1d2269af..64a7b3483895 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 platforms. 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..e27d10754dbf --- /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..8df069c1b0cc --- /dev/null +++ b/drivers/misc/mei/hdcp/mei_hdcp.c @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: (GPL-2.0) +/* + * Copyright © 2017-2018 Intel Corporation + * + * Mei_hdcp.c: HDCP client driver for mei bus + * + * Author: + * 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 GUID_INIT(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");