• Bruno Prémont's avatar
    vgaarb: Don't default exclusively to first video device with mem+io · 86fd887b
    Bruno Prémont authored
    Commit 20cde694 ("x86, ia64: Move EFI_FB vga_default_device()
    initialization to pci_vga_fixup()") moved boot video device detection from
    efifb to x86 and ia64 pci/fixup.c.
    
    For dual-GPU Apple computers above change represents a regression as code
    in efifb did forcefully override vga_default_device while the merge did not
    (vgaarb happens prior to PCI fixup).
    
    To improve on initial device selection by vgaarb (it cannot know if PCI
    device not behind bridges see/decode legacy VGA I/O or not), move the
    screen_info based check from pci_video_fixup() to vgaarb's init function and
    use it to refine/override decision taken while adding the individual PCI
    VGA devices.  This way PCI fixup has no reason to adjust vga_default_device
    anymore but can depend on its value for flagging shadowed VBIOS.
    
    This has the nice benefit of removing duplicated code but does introduce a
    #if defined() block in vgaarb.  Not all architectures have screen_info and
    would cause compile to fail without it.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=84461Reported-and-Tested-By: default avatarAndreas Noever <andreas.noever@gmail.com>
    Signed-off-by: default avatarBruno Prémont <bonbons@linux-vserver.org>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    CC: Matthew Garrett <matthew.garrett@nebula.com>
    CC: stable@vger.kernel.org # v3.5+
    86fd887b
fixup.c 2.21 KB