]> xenbits.xensource.com Git - seabios.git/commitdiff
fw/pci: map memory and IO regions for multiple pci root buses
authorMarcel Apfelbaum <marcel@redhat.com>
Mon, 16 Feb 2015 17:29:20 +0000 (19:29 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Fri, 6 Mar 2015 06:50:05 +0000 (07:50 +0100)
For resource sizing and mapping purposes treat devices on extra root
buses as if they are on the default root bus (bus 0).

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
src/fw/pciinit.c

index cc3ef77ca37d60e3c9f4831eb033661b7c74a70e..ac39d23723bd91998635d15d11e05786e210fbf4 100644 (file)
@@ -681,6 +681,11 @@ static int pci_bios_check_devices(struct pci_bus *busses)
             busses[pci->secondary_bus].bus_dev = pci;
 
         struct pci_bus *bus = &busses[pci_bdf_to_bus(pci->bdf)];
+        if (!bus->bus_dev)
+            /*
+             * Resources for all root busses go in busses[0]
+             */
+            bus = &busses[0];
         int i;
         for (i = 0; i < PCI_NUM_REGIONS; i++) {
             if ((pci->class == PCI_CLASS_BRIDGE_PCI) &&
@@ -711,6 +716,11 @@ static int pci_bios_check_devices(struct pci_bus *busses)
         if (!s->bus_dev)
             continue;
         struct pci_bus *parent = &busses[pci_bdf_to_bus(s->bus_dev->bdf)];
+        if (!parent->bus_dev)
+            /*
+             * Resources for all root busses go in busses[0]
+             */
+            parent = &busses[0];
         int type;
         int hotplug_support = pci_bus_hotplug_support(s);
         for (type = 0; type < PCI_REGION_TYPE_COUNT; type++) {