[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