• Daniel Vetter's avatar
    drm/fb-helper: Fix hpd vs. initial config races · 50c3dc97
    Daniel Vetter authored
    Some drivers need to be able to have a perfect race-free fbcon setup.
    Current drivers only enable hotplug processing after the call to
    drm_fb_helper_initial_config which leaves a tiny but important race.
    
    This race is especially noticable on embedded platforms where the
    driver itself enables the voltage for the hdmi output, since only then
    will monitors (after a bit of delay, as usual) respond by asserting
    the hpd pin.
    
    Most of the infrastructure is already there with the split-out
    drm_fb_helper_init. And drm_fb_helper_initial_config already has all
    the required locking to handle concurrent hpd events since
    
    commit 53f1904b
    Author: Daniel Vetter <daniel.vetter@ffwll.ch>
    Date:   Thu Mar 20 14:26:35 2014 +0100
    
        drm/fb-helper: improve drm_fb_helper_initial_config locking
    
    The only missing bit is making drm_fb_helper_hotplug_event save
    against concurrent calls of drm_fb_helper_initial_config. The only
    unprotected bit is the check for fb_helper->fb.
    
    With that drivers can first initialize the fb helper, then enabel
    hotplug processing and then set up the initial config all in a
    completely race-free manner. Update kerneldoc and convert i915 as a
    proof of concept.
    
    Feature requested by Thierry since his tegra driver atm reliably boots
    slowly enough to misses the hotplug event for an external hdmi screen,
    but also reliably boots to quickly for the hpd pin to be asserted when
    the fb helper calls into the hdmi ->detect function.
    
    Cc: Thierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    50c3dc97
i915_drv.c 43.8 KB