[Intel-gfx] [PATCH 5/5] drm/i915: force full detect on sink count change

Shubhangi Shrivastava shubhangi.shrivastava at intel.com
Thu Mar 31 13:31:11 UTC 2016



On Wednesday 30 March 2016 04:39 PM, Ander Conselvan De Oliveira wrote:
> On Thu, 2016-03-24 at 12:21 +0000, Shrivastava, Shubhangi wrote:
>> Hi Daniel,
>>
>> Is something else required for this patch series (5 patches) to be merged?
> It needs to please CI. The errors reported are probably not caused by this
> series, but at this point is probably better to rebase and resend. CI seems to
> be a lot happier lately. :)
>
> Ander

Alright.. Rebased and resent.. Finally, CI has become happy.. :)
Thanks Ander!!

Shubhangi
>
>> Thanks and Regards,
>> Shubhangi Shrivastava.
>>
>> -----Original Message-----
>> From: Ander Conselvan De Oliveira [mailto:conselvan2 at gmail.com]
>> Sent: Wednesday, January 20, 2016 8:07 PM
>> To: Shrivastava, Shubhangi <shubhangi.shrivastava at intel.com>;
>> intel-gfx at lists.freedesktop.org
>> Subject: Re: [Intel-gfx] [PATCH 5/5] drm/i915: force full detect on sink count
>> change
>>
>> On Tue, 2016-01-19 at 16:07 +0530, Shubhangi Shrivastava wrote:
>>> This patch checks for changes in sink count between short pulse hpds
>>> and forces full detect when there is a change.
>>>
>>> This will allow both detection of hotplug and unplug of panels through
>>> dongles that give only short pulse for such events.
>>>
>>> v2: changed variable type from u8 to bool (Jani)
>>>      return immediately if perform_full_detect is set(Siva)
>>>
>>> v3: changed method of determining full detection from using
>>>      pointer to return code (Siva)
>>>
>>> v4: changed comments to indicate meaning of return value of
>>>      intel_dp_short_pulse and explain the use of return value
>>>      from intel_dp_get_dpcd in intel_dp_short_pulse (Ander)
>>>
>>> Tested-by: Nathan D Ciobanu <nathan.d.ciobanu at intel.com>
>>> Signed-off-by: Sivakumar Thulasimani <sivakumar.thulasimani at intel.com>
>>> Signed-off-by: Shubhangi Shrivastava <shubhangi.shrivastava at intel.com>
>> Reviewed-by: Ander Conselvan de Oliveira <conselvan2 at gmail.com>
>>
>>> ---
>>>   drivers/gpu/drm/i915/intel_dp.c | 33
>>> +++++++++++++++++++++++++++------
>>>   1 file changed, 27 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_dp.c
>>> b/drivers/gpu/drm/i915/intel_dp.c index cdf4919..120d263 100644
>>> --- a/drivers/gpu/drm/i915/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>>> @@ -4325,12 +4325,19 @@ intel_dp_check_link_status(struct intel_dp
>>> *intel_dp)
>>>    *  2. Configure link according to Receiver Capabilities
>>>    *  3. Use Link Training from 2.5.3.3 and 3.5.1.3
>>>    *  4. Check link status on receipt of hot-plug interrupt
>>> + *
>>> + * intel_dp_short_pulse -  handles short pulse interrupts
>>> + * when full detection is not required.
>>> + * Returns %true if short pulse is handled and full detection
>>> + * is NOT required and %false otherwise.
>>>    */
>>> -static void
>>> +static bool
>>>   intel_dp_short_pulse(struct intel_dp *intel_dp)  {
>>>   	struct drm_device *dev = intel_dp_to_dev(intel_dp);
>>>   	u8 sink_irq_vector;
>>> +	u8 old_sink_count = intel_dp->sink_count;
>>> +	bool ret;
>>>   
>>>   	/*
>>>   	 * Clearing compliance test variables to allow capturing @@ -4340,9
>>> +4347,17 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
>>>   	intel_dp->compliance_test_type = 0;
>>>   	intel_dp->compliance_test_data = 0;
>>>   
>>> -	/* Now read the DPCD to see if it's actually running */
>>> -	if (!intel_dp_get_dpcd(intel_dp)) {
>>> -		return;
>>> +	/*
>>> +	 * Now read the DPCD to see if it's actually running
>>> +	 * If the current value of sink count doesn't match with
>>> +	 * the value that was stored earlier or dpcd read failed
>>> +	 * we need to do full detection
>>> +	 */
>>> +	ret = intel_dp_get_dpcd(intel_dp);
>>> +
>>> +	if ((old_sink_count != intel_dp->sink_count) || !ret) {
>>> +		/* No need to proceed if we are going to do full detect */
>>> +		return false;
>>>   	}
>>>   
>>>   	/* Try to read the source of the interrupt */ @@ -4362,6 +4377,8 @@
>>> intel_dp_short_pulse(struct intel_dp *intel_dp)
>>>   	drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
>>>   	intel_dp_check_link_status(intel_dp);
>>>   	drm_modeset_unlock(&dev->mode_config.connection_mutex);
>>> +
>>> +	return true;
>>>   }
>>>   
>>>   /* XXX this is probably wrong for multiple downstream ports */ @@
>>> -5086,8 +5103,12 @@ intel_dp_hpd_pulse(struct intel_digital_port
>>> *intel_dig_port, bool long_hpd)
>>>   			}
>>>   		}
>>>   
>>> -		if (!intel_dp->is_mst)
>>> -			intel_dp_short_pulse(intel_dp);
>>> +		if (!intel_dp->is_mst) {
>>> +			if (!intel_dp_short_pulse(intel_dp)) {
>>> +				intel_dp_long_pulse(intel_dp
>>> ->attached_connector);
>>> +				goto put_power;
>>> +			}
>>> +		}
>>>   	}
>>>   
>>>   	ret = IRQ_HANDLED;



More information about the Intel-gfx mailing list