• P
    drm: do not steal the display if we have a master · 520edd13
    Paulo Zanoni 提交于
    Sometimes we want to disable all the screens on a system, because that
    will allow the graphics card to be put into low-power states. The
    problem is that, for example, while all screens are disabled, if we
    get a hotplug interrupt, fbcon will decide to set a mode instead of
    keeping everything disabled, which will remove us from our low power
    states.
    
    Let's assume that if there's a DRM master, it will be able to do
    whatever is appropriate when we get the hotplug.
    
    This problem can be reproduced by the runtime PM test program from
    intel-gpu-tools: we disable all the screens so the graphics device can
    be put into D3, then something triggers a hotplug interrupt, fbcon
    sets a mode and breaks our test suite. The problem can be reproduced
    more easily by the "i2c" subtest.
    
    Other approaches considered for the problem:
        - Return "false" if "bound == 0" and the caller of
          drm_fb_helper_is_bound is a hotplug handler. This would break
          the case where the machine boots with no outputs connected, then
          the user plugs a monitor.
        - Add a new IOCTL to force fbcon to not set modes. This would keep
          all the current applications behaving the same, but adding a new
          IOCTL is not always the greatest idea.
        - Return false only if "dev->primary->master && bound == 0". This
          was my first implementation, but Chris suggested we should do
          the check irrespective of the "bound" variable.
    
    Thanks to Daniel Vetter for the investigation, ideas and the
    implementation of the hotplug alternative.
    
    v2: - Do the check first, irrespective of "bound".
        - Cc dri-devel
    
    Cc: dri-devel@lists.freedesktop.org
    Credits-to: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
    Signed-off-by: NDave Airlie <airlied@redhat.com>
    520edd13
drm_fb_helper.c 44.4 KB