@@ -582,14 +582,32 @@ static bool vga_arb_integrated_gpu(struct device *dev)
static void vga_arb_update_default_device(struct vga_device *vgadev)
{
struct pci_dev *pdev = vgadev->pdev;
+ struct device *dev = &pdev->dev;
+ struct vga_device *vgadev_default;
/*
* If we don't have a default VGA device yet, and this device owns
* the legacy VGA resources, make it the default.
*/
- if (!vga_default_device() &&
- ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) {
- vgaarb_info(&pdev->dev, "setting as boot VGA device\n");
+ if (!vga_default_device()) {
+ if ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)
+ vgaarb_info(dev, "setting as boot VGA device\n");
+ else
+ vgaarb_info(dev, "setting as boot device (VGA legacy resources not available)\n");
+ vga_set_default_device(pdev);
+ }
+
+ vgadev_default = vgadev_find(vga_default);
+
+ /* Overridden by a better device */
+ if (vgadev_default && ((vgadev_default->owns & VGA_RSRC_LEGACY_MASK) == 0)
+ && ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) {
+ vgaarb_info(dev, "overriding boot VGA device\n");
+ vga_set_default_device(pdev);
+ }
+
+ if (vga_arb_integrated_gpu(dev)) {
+ vgaarb_info(dev, "overriding boot VGA device\n");
vga_set_default_device(pdev);
}
}