Merge branch 'remotes/lorenzo/pci/hyper-v'
[platform/kernel/linux-rpi.git] / drivers / pci / probe.c
index 72da953..d9fc02a 100644 (file)
@@ -595,6 +595,7 @@ static void pci_init_host_bridge(struct pci_host_bridge *bridge)
        bridge->native_pme = 1;
        bridge->native_ltr = 1;
        bridge->native_dpc = 1;
+       bridge->domain_nr = PCI_DOMAIN_NR_NOT_SET;
 
        device_initialize(&bridge->dev);
 }
@@ -829,11 +830,15 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
 {
        struct irq_domain *d;
 
+       /* If the host bridge driver sets a MSI domain of the bridge, use it */
+       d = dev_get_msi_domain(bus->bridge);
+
        /*
         * Any firmware interface that can resolve the msi_domain
         * should be called from here.
         */
-       d = pci_host_bridge_of_msi_domain(bus);
+       if (!d)
+               d = pci_host_bridge_of_msi_domain(bus);
        if (!d)
                d = pci_host_bridge_acpi_msi_domain(bus);
 
@@ -899,7 +904,10 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
        bus->ops = bridge->ops;
        bus->number = bus->busn_res.start = bridge->busnr;
 #ifdef CONFIG_PCI_DOMAINS_GENERIC
-       bus->domain_nr = pci_bus_find_domain_nr(bus, parent);
+       if (bridge->domain_nr == PCI_DOMAIN_NR_NOT_SET)
+               bus->domain_nr = pci_bus_find_domain_nr(bus, parent);
+       else
+               bus->domain_nr = bridge->domain_nr;
 #endif
 
        b = pci_find_bus(pci_domain_nr(bus), bridge->busnr);