Message ID | EE11001F9E5DDD47B7634E2F8A612F2E40B39FC4@FRAEML521-MBX.china.huawei.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Fri, 2017-07-14 at 17:03 +0000, Gabriele Paoloni wrote: > > I'd rather we have no default device until a driver actually picks up > > though, and then, if we still have no default, use the first driver to > > pick up. > > Well from my understanding the PCI host controller driver will enumerate > all the devices in the PCI hierarchy and call pci_device_add() for each of > them, that in turn will call device_add(), at this stage if there is a > driver available for the device such driver will probe otherwise it will not. > > Are you suggesting to add the code above in pci_device_add() after device_add() > and after checking that a driver has been bound for such dev? I don't like us turning on MEM/IO decoding on a device that has potentially not been initialized by its driver. Ben.
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index 92f1452..a90c48c 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c @@ -1424,6 +1424,21 @@ static int __init vga_arb_device_init(void) list_for_each_entry(vgadev, &vga_list, list) { struct device *dev = &vgadev->pdev->dev; + + /* if no legacy device has been set as default VGA device, + * justpick up the first one in the list capable of responding to + * mem and io requests*/ + if (vga_default == NULL) { + u16 cmd; + + pci_read_config_word(vgadev->pdev, PCI_COMMAND, &cmd); + if ((cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) || + !vga_default_device()) { + vga_set_default_device(vgadev->pdev); + vgaarb_info(dev, "setting as boot VGA device\n"); + } + } + #if defined(CONFIG_X86) || defined(CONFIG_IA64) /* * Override vga_arbiter_add_pci_device()'s I/O based detection