Do no reset the max link parameters when userspace reprobes modes

Manasi Navare manasi.d.navare at intel.com
Tue Feb 7 01:35:17 UTC 2017


Hi,

I am working on a solution for handling link failures during or after
the modeset. 

In case of link failure, the max link rate/lane count values
are updated to lower link rate/lane count as per the spec and uevent is
sent to the userspace with link-status BAD. The userspace is expected to first
retry the existing mode and do a a full reprobe if this fails.

When userspace reprobes the modes, it calls drmModeGetConnector() IOCTL, that
eventually calls drm_helper_probe_single_connector_modes(). This helper function
calls the connector->func->detect() which in case of i915 calls intel_dp_detect()
which calls intel_dp_long_pulse() that resets the max_link_rate and max_link_lane_count
values. 

Now during the link training retry, it uses the reset values of link rate/lane count
instead of using the lowered link rate/lane count values from link failure.
For this to work properly, we should not reset the link rate/lane count values
during the fill_modes() operation from userspace. However the current driver calls
the long pulse handler again during fill_modes and resets all the values as per DPCD reads
which fails to retrain the link at lower rate.

How can we handle this situation? Do we need to call long pulse handler
again during fill_modes()? Any ideas/suggestions?

Regards
Manasi 


More information about the dri-devel mailing list