• Thierry Reding's avatar
    drm/tegra: Implement race-free hotplug detection · e2215321
    Thierry Reding authored
    A race condition currently exists on Tegra, where it can happen that a
    monitor attached via HDMI isn't detected during the initial FB helper
    setup, but the hotplug event happens too early to be processed by the
    poll helpers because they haven't been initialized yet. This happens
    because on some boards the HDMI driver can control the regulator that
    supplies the +5V pin on the HDMI connector. Therefore depending on the
    timing between the initialization of the HDMI driver and the rest of
    DRM, it's possible that the monitor returns the hotplug signal right
    within the window where we would miss it.
    
    Unfortunately, drm_kms_helper_poll_init() will wreak havoc when called
    before at least some parts of the FB helpers have been set up.
    
    This commit fixes this by splitting out the minimum of initialization
    required to make drm_kms_helper_poll_init() work into a separate
    function that can be called early. It is then safe to move all of the
    poll helper initialization to an earlier point in time (before the
    HDMI output driver has a chance to enable the +5V supply). That way if
    the hotplug signal is returned before the initial FB helper setup, the
    monitor will be forcefully detected at that point, and if the hotplug
    signal is returned after that it will be properly handled by the poll
    helpers.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    e2215321
drm.c 18.7 KB