All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ramalingam C <ramalingam.c@intel.com>
To: Sean Paul <seanpaul@chromium.org>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
	rodrigo.vivi@intel.com
Subject: Re: [PATCH v2 2/4] drm/i915: Read Vprime thrice incase of mismatch
Date: Mon, 2 Apr 2018 14:46:33 +0530	[thread overview]
Message-ID: <57633bbe-7687-7049-bd95-c3a7b7915e18@intel.com> (raw)
In-Reply-To: <20180329143846.GD41885@art_vandelay>



On Thursday 29 March 2018 08:08 PM, Sean Paul wrote:
> On Thu, Mar 29, 2018 at 07:39:06PM +0530, Ramalingam C wrote:
>> In case of V prime mismatch, DP HDCP spec mandates the re-read of
>> Vprime atleast twice.
>>
>> This patch needed for DP HDCP1.4 CTS Test: 1B-05.
>>
>> v2:
>>    Moved the V' validation into a function for retry. [Sean Paul]
>>
>> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_hdcp.c | 113 +++++++++++++++++++++++---------------
>>   1 file changed, 70 insertions(+), 43 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c
>> index 96b9025dc759..f77d956b2b18 100644
>> --- a/drivers/gpu/drm/i915/intel_hdcp.c
>> +++ b/drivers/gpu/drm/i915/intel_hdcp.c
>> @@ -142,53 +142,17 @@ bool intel_hdcp_is_ksv_valid(u8 *ksv)
>>   	return true;
>>   }
>>   
>> -/* Implements Part 2 of the HDCP authorization procedure */
>> -static
>> -int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
>> -			       const struct intel_hdcp_shim *shim)
>> +static inline
> Why inline?
Its a mistake. Will correct it. thanks
>
>> +int intel_hdcp_validate_v_prime(struct intel_digital_port *intel_dig_port,
>> +				const struct intel_hdcp_shim *shim,
>> +				u8 *ksv_fifo, u8 num_downstream, u8 *bstatus)
>>   {
>>   	struct drm_i915_private *dev_priv;
>>   	u32 vprime, sha_text, sha_leftovers, rep_ctl;
>> -	u8 bstatus[2], num_downstream, *ksv_fifo;
>>   	int ret, i, j, sha_idx;
>>   
>>   	dev_priv = intel_dig_port->base.base.dev->dev_private;
>>   
>> -	ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
>> -	if (ret) {
>> -		DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
>> -		return ret;
>> -	}
>> -
>> -	ret = shim->read_bstatus(intel_dig_port, bstatus);
>> -	if (ret)
>> -		return ret;
>> -
>> -	if (DRM_HDCP_MAX_DEVICE_EXCEEDED(bstatus[0]) ||
>> -	    DRM_HDCP_MAX_CASCADE_EXCEEDED(bstatus[1])) {
>> -		DRM_ERROR("Max Topology Limit Exceeded\n");
>> -		return -EPERM;
>> -	}
>> -
>> -	/*
>> -	 * When repeater reports 0 device count, HDCP1.4 spec allows disabling
>> -	 * the HDCP encryption. That implies that repeater can't have its own
>> -	 * display. As there is no consumption of encrypted content in the
>> -	 * repeater with 0 downstream devices, we are failing the
>> -	 * authentication.
>> -	 */
>> -	num_downstream = DRM_HDCP_NUM_DOWNSTREAM(bstatus[0]);
>> -	if (num_downstream == 0)
>> -		return -EINVAL;
>> -
>> -	ksv_fifo = kzalloc(num_downstream * DRM_HDCP_KSV_LEN, GFP_KERNEL);
>> -	if (!ksv_fifo)
>> -		return -ENOMEM;
>> -
>> -	ret = shim->read_ksv_fifo(intel_dig_port, num_downstream, ksv_fifo);
>> -	if (ret)
>> -		return ret;
>> -
>>   	/* Process V' values from the receiver */
>>   	for (i = 0; i < DRM_HDCP_V_PRIME_NUM_PARTS; i++) {
>>   		ret = shim->read_v_prime_part(intel_dig_port, i, &vprime);
>> @@ -353,7 +317,7 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
>>   			return ret;
>>   		sha_idx += sizeof(sha_text);
>>   	} else {
>> -		DRM_ERROR("Invalid number of leftovers %d\n", sha_leftovers);
>> +		DRM_DEBUG("Invalid number of leftovers %d\n", sha_leftovers);
>>   		return -EINVAL;
>>   	}
>>   
>> @@ -381,14 +345,77 @@ int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
>>   	if (intel_wait_for_register(dev_priv, HDCP_REP_CTL,
>>   				    HDCP_SHA1_COMPLETE,
>>   				    HDCP_SHA1_COMPLETE, 1)) {
>> -		DRM_ERROR("Timed out waiting for SHA1 complete\n");
>> +		DRM_DEBUG("Timed out waiting for SHA1 complete\n");
>>   		return -ETIMEDOUT;
>>   	}
>>   	if (!(I915_READ(HDCP_REP_CTL) & HDCP_SHA1_V_MATCH)) {
>> -		DRM_ERROR("SHA-1 mismatch, HDCP failed\n");
>> +		DRM_DEBUG("SHA-1 mismatch, HDCP failed\n");
> I think the DEBUG should be DEBUG_KMS, consistent with the rest of the file?
Will make it uniform

--Ram
>
>>   		return -ENXIO;
>>   	}
>>   
>> +	return 0;
>> +}
>> +
>> +/* Implements Part 2 of the HDCP authorization procedure */
>> +static
>> +int intel_hdcp_auth_downstream(struct intel_digital_port *intel_dig_port,
>> +			       const struct intel_hdcp_shim *shim)
>> +{
>> +	u8 bstatus[2], num_downstream, *ksv_fifo;
>> +	int ret, i, tries = 3;
>> +
>> +	ret = intel_hdcp_poll_ksv_fifo(intel_dig_port, shim);
>> +	if (ret) {
>> +		DRM_ERROR("KSV list failed to become ready (%d)\n", ret);
>> +		return ret;
>> +	}
>> +
>> +	ret = shim->read_bstatus(intel_dig_port, bstatus);
>> +	if (ret)
>> +		return ret;
>> +
>> +	if (DRM_HDCP_MAX_DEVICE_EXCEEDED(bstatus[0]) ||
>> +	    DRM_HDCP_MAX_CASCADE_EXCEEDED(bstatus[1])) {
>> +		DRM_ERROR("Max Topology Limit Exceeded\n");
>> +		return -EPERM;
>> +	}
>> +
>> +	/*
>> +	 * When repeater reports 0 device count, HDCP1.4 spec allows disabling
>> +	 * the HDCP encryption. That implies that repeater can't have its own
>> +	 * display. As there is no consumption of encrypted content in the
>> +	 * repeater with 0 downstream devices, we are failing the
>> +	 * authentication.
>> +	 */
>> +	num_downstream = DRM_HDCP_NUM_DOWNSTREAM(bstatus[0]);
>> +	if (num_downstream == 0)
>> +		return -EINVAL;
>> +
>> +	ksv_fifo = kzalloc(num_downstream * DRM_HDCP_KSV_LEN, GFP_KERNEL);
>> +	if (!ksv_fifo)
>> +		return -ENOMEM;
>> +
>> +	ret = shim->read_ksv_fifo(intel_dig_port, num_downstream, ksv_fifo);
>> +	if (ret)
>> +		return ret;
>> +
>> +	/*
>> +	 * When V prime mismatches, DP Spec mandates re-read of
>> +	 * V prime atleast twice.
>> +	 */
>> +	for (i = 0; i < tries; i++) {
>> +		ret = intel_hdcp_validate_v_prime(intel_dig_port, shim,
>> +						  ksv_fifo, num_downstream,
>> +						  bstatus);
>> +		if (!ret)
>> +			break;
>> +	}
>> +
>> +	if (i == tries) {
>> +		DRM_ERROR("V Prime validation failed.(%d)\n", ret);
>> +		return ret;
>> +	}
>> +
>>   	DRM_DEBUG_KMS("HDCP is enabled (%d downstream devices)\n",
>>   		      num_downstream);
>>   	return 0;
>> -- 
>> 2.7.4
>>

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

  reply	other threads:[~2018-04-02  9:16 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-29 14:09 [PATCH v2 0/4] HDCP1.4 fixes Ramalingam C
2018-03-29 14:09 ` [PATCH v2 1/4] drm/i915: Read HDCP R0 thrice in case of mismatch Ramalingam C
2018-03-29 14:35   ` Sean Paul
2018-04-02  9:08     ` Ramalingam C
2018-03-29 14:09 ` [PATCH v2 2/4] drm/i915: Read Vprime thrice incase " Ramalingam C
2018-03-29 14:38   ` Sean Paul
2018-04-02  9:16     ` Ramalingam C [this message]
2018-03-29 14:09 ` [PATCH v2 3/4] drm/i915: Check hdcp key loadability Ramalingam C
2018-03-29 14:24   ` Ville Syrjälä
2018-04-02  9:05     ` Ramalingam C
2018-04-06 16:02       ` Ville Syrjälä
2018-04-09  8:28         ` Daniel Vetter
2018-04-11  8:27           ` Ramalingam C
2018-04-13 15:49             ` Daniel Vetter
2018-03-29 14:09 ` [PATCH v2 4/4] drm/i915: Fix downstream dev count read Ramalingam C
2018-03-29 14:39   ` Sean Paul
2018-03-29 14:12 ` [PATCH v2 0/4] HDCP1.4 fixes Ramalingam C
2018-03-29 14:45 ` ✓ Fi.CI.BAT: success for HDCP1.4 fixes (rev3) Patchwork
2018-03-29 17:53 ` ✗ Fi.CI.IGT: failure " Patchwork

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=57633bbe-7687-7049-bd95-c3a7b7915e18@intel.com \
    --to=ramalingam.c@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=seanpaul@chromium.org \
    /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.