Display-Port HPD handling, link status, and bandwidth checks
Tomi Valkeinen
tomi.valkeinen at ti.com
Tue Aug 27 11:48:51 UTC 2019
On 25/08/2019 23:23, Ilia Mirkin wrote:
> You'll probably get a more detailed reply during the week, but for now
> have a look at the "link-status" property, which was made for
> precisely this situation. I think basically the idea is to ignore link
> training as part of the modeset, and just return the link status
> depending on the success. (And you should filter out totally
> infeasible modes, i.e. outside the monitor's max lanes/bandwidth
> capabilities, which I believe are available via DPCD or EDID.)
>
> See https://www.kernel.org/doc/html/latest/gpu/drm-kms.html for a bit
> more info as well.
We've got similar issue with HDMI too. If HPD first goes low, then high,
but the userspace hasn't handled the HPD event in between, the
userspaces I looked at just think that nothing has happened.
So maybe any time there's a HPD -> low, we should set link-status to
bad, hope that userspace knows about the property, and at next modeset,
set it back to good.
Tomi
>
> Cheers,
>
> -ilia
>
> On Sun, Aug 25, 2019 at 7:12 AM Jyri Sarha <jsarha at ti.com> wrote:
>>
>> Hi,
>>
>> I am working on a new DisplayPort bridge-driver and there is a couple of
>> things that I do not know how to handle.
>>
>> 1. When should the link training happen?
>> a) In connector detect()?
>> - This would enable us to do mode filtering (in mode_valid())
>> based on the established link band-width (then again
>> mode_valid() documentation suggests that modes should only
>> be filtered based on "configuration-invariant hardware
>> constraints").
>> b) In check phase (this would currently mean mode_fixup)?
>> - This is the last point where we can reject a mode that can not
>> be sent over the DP-link
>> c) In commit phase (e.g. bridge enable())
>> - This is bad since we should not fail any more in the commit
>> phase
>>
>> 2. DP-link sometimes drops after a succesful link training and DP-sink
>> is supposed to send short HPD pulse about it. What are the
>> recommended ways to handle the situation?
>>
>> a) Send hotplug event and let the DRM client deal with it?
>> - This does not work too well because even if the client tries
>> to restore the display by committing the same state again -
>> like fbdev does - the bridge does not go trough disable-enable
>> cycle, since display mode has not changed.
>> - Despite it not working so well, this is what the most drivers
>> appear to do.
>>
>> b) Driver internally re-trains the link but send a hotplug event
>> always after it?
>> - This is what i915 does, if I read the code right.
>> - How to treat a training failure? Sending hotplug event does not
>> really help (see above).
>>
>> c) Silently re-train the link if we were able to restore the link
>> and the display mode, and send HPD only if something went wrong?
>>
>> Best regards,
>> Jyri
>>
>> --
>> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
>> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
More information about the dri-devel
mailing list