Display-Port HPD handling, link status, and bandwidth checks
Jyri Sarha
jsarha at ti.com
Mon Sep 2 21:51:43 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.
>
It looks like only i915 is really implementing the "link-status"
property (e.g. setting it to something else than "GOOD"). And it only
sets it in delayed work right after a failed link-training.
But it looks like setting "link-status" bad and calling
drm_kms_helper_hotplug_event() indeed triggers another modeset at least
from fbdev console.
I guess the correct way would be checking if the link is still up
after receiving an HPD short pulse and setting link-status bad and
calling drm_kms_helper_hotplug_event() if the link is down.
I just wonder if the real user space clients like Weston or X work the
same way as fbdev does.
Maybe my first question is now answered, but I am still wondering about
this:
>> 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
Thanks,
Jyri
> 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