All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ramalingam C <ramalingam.c@intel.com>
To: "Winkler, Tomas" <tomas.winkler@intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	"seanpaul@chromium.org" <seanpaul@chromium.org>,
	"chris@chris-wilson.co.uk" <chris@chris-wilson.co.uk>,
	"jani.nikula@linux.intel.com" <jani.nikula@linux.intel.com>
Cc: "Shankar, Uma" <uma.shankar@intel.com>,
	"Vivi, Rodrigo" <rodrigo.vivi@intel.com>
Subject: Re: [PATCH v2 07/42] misc/mei/hdcp: Get & Put for mei cl_device
Date: Mon, 12 Mar 2018 17:05:35 +0530	[thread overview]
Message-ID: <baf5643b-2c93-fb89-75cb-c0af07a9c782@intel.com> (raw)
In-Reply-To: <5B8DA87D05A7694D9FA63FD143655C1B942317FD@hasmsx108.ger.corp.intel.com>



On Thursday 08 March 2018 06:40 PM, Winkler, Tomas wrote:
>> Interfaces to obtain and release the cl_device reference is developed.
>> Using these interfaces intel hdcp driver will get the reference to the mei
>> client devices, so that hdcp2.2 service calls can be routed to that client
>> device.
>>
>> During registration, call back function will be registered with mei_hdcp driver
>> so that when the client device is removed intel hdcp driver can be informed.
>>
>> At a time only one reference is allowed in this interfaces.
>>
>> v2:
>>    Rebased.
> Linux kernel already provide notification chain,  please use that.
Sensing a problem here. Publisher module (mei_hdcp) for the notifier 
chain is loaded later than the I915's hdcp init (subscriber to the module).
Events that we will be interested are enabled and disabled states of the 
mei_hdcp_device.

I will explore further. Thanks for the suggestion
> This is not needed and I'm not sure it will ever work.
I am not sure, why do you think like that. This might not be in good 
shape but this is completely functional.
This v2 series is tested for HDCP2.2 feature on drm-tip before publishing.

 From starting I was not comfortable with this handshaking part between 
I915 and mei_hdcp. Thanks for the suggestions.
I will work on them.

--Ram
>
> Tomas
>
>   
>> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
>> ---
>>   drivers/misc/mei/hdcp/mei_hdcp.c | 55
>> +++++++++++++++++++++++++++++++++++++++-
>>   drivers/misc/mei/hdcp/mei_hdcp.h |  9 +++++++
>>   include/linux/mei_hdcp.h         | 47 ++++++++++++++++++++++++++++++++++
>>   3 files changed, 110 insertions(+), 1 deletion(-)  create mode 100644
>> include/linux/mei_hdcp.h
>>
>> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>> b/drivers/misc/mei/hdcp/mei_hdcp.c
>> index 25df7034cfb4..63f77800a6f7 100644
>> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>> @@ -55,18 +55,71 @@ static int mei_hdcp_probe(struct mei_cl_device
>> *cldev,
>>   	mei_cldev_set_drvdata(cldev, &mei_hdcp);
>>
>>   	ret = mei_cldev_enable(cldev);
>> -	if (ret < 0)
>> +	if (ret < 0) {
>>   		dev_err(&cldev->dev, "mei_cldev_enable Failed. %d\n", ret);
>> +		goto err;
>> +	}
>> +
>> +	if (mei_hdcp.notify_on_cldev_change)
>> +		mei_hdcp.notify_on_cldev_change(mei_hdcp.client, cldev);
>> +
>> +	return 0;
>> +err:
>> +	if (mei_hdcp.notify_on_cldev_change)
>> +		mei_hdcp.notify_on_cldev_change(mei_hdcp.client, NULL);
>>
>>   	return ret;
>>   }
>>
>>   static int mei_hdcp_remove(struct mei_cl_device *cldev)  {
>> +	struct mei_hdcp *mei_hdcp = mei_cldev_get_drvdata(cldev);
>> +
>> +	if (mei_hdcp->notify_on_cldev_change)
>> +		mei_hdcp->notify_on_cldev_change(mei_hdcp->client, NULL);
>> +
>>   	mei_cldev_disable(cldev);
>> +
>>   	return 0;
>>   }
>>
>> +int mei_hdcp_cldev_get_reference(void *client_data,
>> +				 struct mei_cl_device **cldev,
>> +				 void (*notify_change)(void *client,
>> +						       struct mei_cl_device
>> +						       *cldev))
>> +{
>> +	if (!notify_change || !client_data)
>> +		return -EINVAL;
>> +
>> +	if (mei_hdcp.ref_cnt)
>> +		return -EBUSY;
>> +
>> +	if (!mei_cldev_active_and_enabled(mei_hdcp.cldev)) {
>> +		if (!notify_change)
>> +			return -EAGAIN;
>> +	} else {
>> +		*cldev = mei_hdcp.cldev;
>> +	}
>> +
>> +	mei_hdcp.ref_cnt++;
>> +	mei_hdcp.client = client_data;
>> +	mei_hdcp.notify_on_cldev_change = notify_change;
>> +
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(mei_hdcp_cldev_get_reference);
>> +
>> +void mei_hdcp_cldev_put_reference(struct mei_cl_device *cldev) {
>> +	if (cldev == mei_hdcp.cldev) {
>> +		mei_hdcp.ref_cnt--;
>> +		mei_hdcp.client = NULL;
>> +		mei_hdcp.notify_on_cldev_change = NULL;
>> +	}
>> +}
>> +EXPORT_SYMBOL(mei_hdcp_cldev_put_reference);
>> +
>>   #define WIDI_HECI_CLIENT_GUID	UUID_LE(0xB638AB7E, 0x94E2,
>> 0x4EA2, 0xA5, \
>>   					0x52, 0xD1, 0xC5, 0x4B, \
>>   					0x62, 0x7F, 0x04)
>> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.h
>> b/drivers/misc/mei/hdcp/mei_hdcp.h
>> index c06c0d767c4f..7d792b5ad703 100644
>> --- a/drivers/misc/mei/hdcp/mei_hdcp.h
>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.h
>> @@ -27,6 +27,15 @@
>>
>>   struct mei_hdcp {
>>   	struct mei_cl_device *cldev;
>> +
>> +	/* Reference to the HDCP2.2 service consumer */
>> +	void *client;
>> +
>> +	/* Callback function for the consumer on cl_device state change */
>> +	void (*notify_on_cldev_change)(void *client,
>> +				      struct mei_cl_device *cldev);
>> +
>> +	int ref_cnt;
>>   };
>>
>>   #endif /* __MEI_HDCP_H__ */
>> diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h new file
>> mode 100644 index 000000000000..774b26da0c26
>> --- /dev/null
>> +++ b/include/linux/mei_hdcp.h
>> @@ -0,0 +1,47 @@
>> +/*
>> + * Copyright (c) 2017 Intel Corporation
>> + *
>> + * Permission to use, copy, modify, distribute, and sell this software
>> +and its
>> + * documentation for any purpose is hereby granted without fee,
>> +provided that
>> + * the above copyright notice appear in all copies and that both that
>> +copyright
>> + * notice and this permission notice appear in supporting
>> +documentation, and
>> + * that the name of the copyright holders not be used in advertising or
>> + * publicity pertaining to distribution of the software without
>> +specific,
>> + * written prior permission.  The copyright holders make no
>> +representations
>> + * about the suitability of this software for any purpose.  It is
>> +provided "as
>> + * is" without express or implied warranty.
>> + *
>> + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO
>> THIS
>> +SOFTWARE,
>> + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
>> FITNESS, IN
>> +NO
>> + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL,
>> +INDIRECT OR
>> + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
>> FROM LOSS
>> +OF USE,
>> + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
>> OR
>> +OTHER
>> + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
>> OR
>> +PERFORMANCE
>> + * OF THIS SOFTWARE.
>> + */
>> +
>> +#ifndef _LINUX_MEI_HDCP_H
>> +#define _LINUX_MEI_HDCP_H
>> +
>> +#ifdef CONFIG_INTEL_MEI_HDCP
>> +int mei_hdcp_cldev_get_reference(void *client_data,
>> +				 struct mei_cl_device **cldev,
>> +				 void (*notify_change)(void *client,
>> +						       struct mei_cl_device
>> +						       *cldev));
>> +void mei_hdcp_cldev_put_reference(struct mei_cl_device *cldev); #else
>> +static inline int mei_hdcp_cldev_get_reference(void *client_data,
>> +				 struct mei_cl_device **cldev,
>> +				 void (*notify_change)(void *client,
>> +						       struct mei_cl_device
>> +						       *cldev))
>> +{
>> +	return -ENODEV;
>> +}
>> +static inline
>> +void mei_hdcp_cldev_put_reference(struct mei_cl_device *cldev) {}
>> +#endif /* defined (CONFIG_INTEL_MEI_HDCP) */ #endif /* defined
>> +(_LINUX_MEI_HDCP_H) */
>> --
>> 2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-03-12 11:35 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08 11:58 [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Ramalingam C
2018-03-08 11:58 ` [PATCH v2 01/42] drm: hdcp2.2 authentication msg definitions Ramalingam C
2018-03-08 11:58 ` [PATCH v2 02/42] drm: HDMI and DP specific HDCP2.2 defines Ramalingam C
2018-03-08 11:58 ` [PATCH v2 03/42] mei: bus: whitelist hdcp client Ramalingam C
2018-03-08 11:58 ` [PATCH v2 04/42] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2018-03-08 13:07   ` Winkler, Tomas
2018-03-12 10:58     ` Ramalingam C
2018-03-12 11:22       ` Winkler, Tomas
2018-03-12 11:20         ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 05/42] misc/mei/hdcp: Add KBuild for mei hdcp driver Ramalingam C
2018-03-08 11:58 ` [PATCH v2 06/42] misc/mei/hdcp: Verify mei client device status Ramalingam C
2018-03-08 13:08   ` Winkler, Tomas
2018-03-12 11:02     ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 07/42] misc/mei/hdcp: Get & Put for mei cl_device Ramalingam C
2018-03-08 13:10   ` Winkler, Tomas
2018-03-12 11:35     ` Ramalingam C [this message]
2018-03-08 11:58 ` [PATCH v2 08/42] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2018-03-08 11:58 ` [PATCH v2 09/42] linux/mei: Header for mei_hdcp driver interface Ramalingam C
2018-03-08 13:13   ` Winkler, Tomas
2018-03-12 11:15     ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 10/42] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2018-03-08 13:17   ` Winkler, Tomas
2018-03-12 11:19     ` Ramalingam C
2018-03-12 11:32       ` Winkler, Tomas
2018-03-12 11:38         ` Ramalingam C
2018-03-08 11:58 ` [PATCH v2 11/42] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2018-03-08 11:58 ` [PATCH v2 12/42] misc/mei/hdcp: Verify H_prime Ramalingam C
2018-03-08 11:58 ` [PATCH v2 13/42] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C
2018-03-08 11:58 ` [PATCH v2 14/42] misc/mei/hdcp: Initiate Locality check Ramalingam C
2018-03-08 11:58 ` [PATCH v2 15/42] misc/mei/hdcp: Verify L_prime Ramalingam C
2018-03-08 11:58 ` [PATCH v2 16/42] misc/mei/hdcp: Prepare Session Key Ramalingam C
2018-03-08 11:58 ` [PATCH v2 17/42] misc/mei/hdcp: Repeater topology verifcation and ack Ramalingam C
2018-03-08 11:58 ` [PATCH v2 18/42] misc/mei/hdcp: Verify M_prime Ramalingam C
2018-03-08 11:58 ` [PATCH v2 19/42] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 20/42] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2018-03-08 11:58 ` [PATCH v2 21/42] drm/i915: wrapping all hdcp var into intel_hdcp Ramalingam C
2018-03-08 11:58 ` [PATCH v2 22/42] drm/i915: Define HDCP2.2 related variables Ramalingam C
2018-03-08 11:58 ` [PATCH v2 23/42] drm/i915: Define Intel HDCP2.2 registers Ramalingam C
2018-03-08 11:58 ` [PATCH v2 24/42] drm/i915: Wrappers for mei HDCP2.2 services Ramalingam C
2018-03-08 11:58 ` [PATCH v2 25/42] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 26/42] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2018-03-08 11:58 ` [PATCH v2 27/42] drm/i915: Enable and Disable HDCP2.2 port encryption Ramalingam C
2018-03-08 11:58 ` [PATCH v2 28/42] drm/i915: Implement HDCP2.2 En/Dis-able Ramalingam C
2018-03-08 11:58 ` [PATCH v2 29/42] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2018-03-08 11:58 ` [PATCH v2 30/42] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2018-03-08 11:58 ` [PATCH v2 31/42] drm/i915: Pullout the bksv read and validation Ramalingam C
2018-03-08 11:58 ` [PATCH v2 32/42] drm/i915: Initialize HDCP2.2 and its MEI interface Ramalingam C
2018-03-08 11:59 ` [PATCH v2 33/42] drm/i915: Schedule hdcp_check_link in _intel_hdcp_enable Ramalingam C
2018-03-08 11:59 ` [PATCH v2 34/42] drm/i915: Enable superior HDCP ver that is capable Ramalingam C
2018-03-08 11:59 ` [PATCH v2 35/42] drm/i915: Enable HDCP1.4 incase of HDCP2.2 failure Ramalingam C
2018-03-08 11:59 ` [PATCH v2 36/42] drm/i915: hdcp_check_link only on CP_IRQ Ramalingam C
2018-03-08 11:59 ` [PATCH v2 37/42] drm/i915: Check HDCP 1.4 and 2.2 link " Ramalingam C
2018-03-08 11:59 ` [PATCH v2 38/42] drm/i915: Implement gmbus burst read Ramalingam C
2018-03-08 11:59 ` [PATCH v2 39/42] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C
2018-03-08 11:59 ` [PATCH v2 40/42] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2018-03-08 11:59 ` [PATCH v2 41/42] drm/i915: Add HDCP2.2 support for DP connectors Ramalingam C
2018-03-08 11:59 ` [PATCH v2 42/42] drm/i915: Add HDCP2.2 support for HDMI connectors Ramalingam C
2018-03-08 12:30 ` [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Winkler, Tomas
2018-03-08 12:33   ` Ramalingam C
2018-03-09  9:26     ` Daniel Vetter
2018-03-08 12:49 ` ✗ Fi.CI.BAT: failure for drm/i915: Implement HDCP2.2 (rev2) Patchwork
2018-03-12 11:46 ` [PATCH v2 00/42] drm/i915: Implement HDCP2.2 Ramalingam C

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=baf5643b-2c93-fb89-75cb-c0af07a9c782@intel.com \
    --to=ramalingam.c@intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=seanpaul@chromium.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.