> 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@xxxxxxxxx> > Signed-off-by: Tomas Winkler <tomas.winkler@xxxxxxxxx> > --- > 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. This is not limited to SoC this goes for PCH based platforms as well. > 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..b8580b91e255 > --- /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 > + * > + * Author: > + * Ramalingam C <ramalingam.c@xxxxxxxxx> */ > + > +/** > + * 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, I would use space instead of tab here, it's not sable view between editors. > 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, Would use spaces here too, between structure member and assignment. Otherwise looks good to me. Ack. Thanks Tomas _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx