[Intel-gfx] [PATCH] v3 drm/i915: Re-apply "Perform link quality check, unconditionally during long pulse"
Jan-Marek Glogowski
glogow at fbihome.de
Thu Aug 16 19:12:33 UTC 2018
Am August 16, 2018 6:03:50 PM UTC schrieb Manasi Navare <manasi.d.navare at intel.com>:
>On Wed, Aug 08, 2018 at 10:53:35AM +0200, Jan-Marek Glogowski wrote:
>> This re-applies the workaround for "some DP sinks, [which] are a
>> little nuts" from commit 1a36147bb939 ("drm/i915: Perform link
>> quality check unconditionally during long pulse").
>> It makes the secondary AOC E2460P monitor connected via DP to an
>> acer Veriton N4640G usable again.
>
>Would be nice to add in the commit message that this sink sends a
>long pulse to indicate link loss, hence check link status during long
>pulse.
I have no idea, if this is happening. I just found the monitor wasn't working with the current kernel, when I was trying to debug an other bug I ran into while backporting DRM 4.15 to 4.4. I did a bisect while at it. Please read the FDO bug for more info.
>If there is a FDO bug associated with this you could also add the
>Bugzilla link before Sign off tag.
>But other than that this looks good to me.
FDO bug: https://bugs.freedesktop.org/show_bug.cgi?id=107446
>
>Manasi
>
>>
>> This hunk was dropped in commit c85d200e8321 ("drm/i915: Move SST
>> DP link retraining into the ->post_hotplug() hook")
>>
>> Signed-off-by: Jan-Marek Glogowski <glogow at fbihome.de>
>> ---
>> drivers/gpu/drm/i915/intel_dp.c | 33
>+++++++++++++++++++--------------
>> 1 file changed, 19 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dp.c
>b/drivers/gpu/drm/i915/intel_dp.c
>> index 8e0e14b..22b2452 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -4333,18 +4333,6 @@ intel_dp_needs_link_retrain(struct intel_dp
>*intel_dp)
>> return !drm_dp_channel_eq_ok(link_status, intel_dp->lane_count);
>> }
>>
>> -/*
>> - * If display is now connected check links status,
>> - * there has been known issues of link loss triggering
>> - * long pulse.
>> - *
>> - * Some sinks (eg. ASUS PB287Q) seem to perform some
>> - * weird HPD ping pong during modesets. So we can apparently
>> - * end up with HPD going low during a modeset, and then
>> - * going back up soon after. And once that happens we must
>> - * retrain the link to get a picture. That's in case no
>> - * userspace component reacted to intermittent HPD dip.
>> - */
>> int intel_dp_retrain_link(struct intel_encoder *encoder,
>> struct drm_modeset_acquire_ctx *ctx)
>> {
>> @@ -4923,7 +4911,8 @@ intel_dp_unset_edid(struct intel_dp *intel_dp)
>> }
>>
>> static int
>> -intel_dp_long_pulse(struct intel_connector *connector)
>> +intel_dp_long_pulse(struct intel_connector *connector,
>> + struct drm_modeset_acquire_ctx *ctx)
>> {
>> struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
>> struct intel_dp *intel_dp = intel_attached_dp(&connector->base);
>> @@ -4982,6 +4971,22 @@ intel_dp_long_pulse(struct intel_connector
>*connector)
>> */
>> status = connector_status_disconnected;
>> goto out;
>> + } else {
>> + /*
>> + * If display is now connected check links status,
>> + * there has been known issues of link loss triggering
>> + * long pulse.
>> + *
>> + * Some sinks (eg. ASUS PB287Q) seem to perform some
>> + * weird HPD ping pong during modesets. So we can apparently
>> + * end up with HPD going low during a modeset, and then
>> + * going back up soon after. And once that happens we must
>> + * retrain the link to get a picture. That's in case no
>> + * userspace component reacted to intermittent HPD dip.
>> + */
>> + struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
>> +
>> + intel_dp_retrain_link(encoder, ctx);
>> }
>>
>> /*
>> @@ -5043,7 +5048,7 @@ intel_dp_detect(struct drm_connector
>*connector,
>> return ret;
>> }
>>
>> - status = intel_dp_long_pulse(intel_dp->attached_connector);
>> + status = intel_dp_long_pulse(intel_dp->attached_connector, ctx);
>> }
>>
>> intel_dp->detect_done = false;
>> --
>> 2.1.4
>>
More information about the Intel-gfx
mailing list