devicetree: Single scan_bridges()

Change-Id: Ifd277992a69a4182e2fac92aaf746abe4fec2a1b
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/8540
Tested-by: build bot (Jenkins)
Reviewed-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Kyösti Mälkki 2015-02-20 21:28:31 +02:00
parent de271a8f0a
commit 2d2367cd95
4 changed files with 21 additions and 21 deletions

View File

@ -916,15 +916,15 @@ int reset_bus(struct bus *bus)
* @param max Current bus number. * @param max Current bus number.
* @return The maximum bus number found, after scanning all subordinate buses. * @return The maximum bus number found, after scanning all subordinate buses.
*/ */
unsigned int scan_bus(struct device *busdev, unsigned int max) static unsigned int scan_bus(struct device *busdev, unsigned int max)
{ {
unsigned int new_max; unsigned int new_max;
int do_scan_bus; int do_scan_bus;
if (!busdev || !busdev->enabled || !busdev->ops || if (!busdev->enabled)
!busdev->ops->scan_bus) {
return max; return max;
}
printk(BIOS_SPEW, "%s scanning...\n", dev_path(busdev));
post_log_path(busdev); post_log_path(busdev);
@ -945,6 +945,19 @@ unsigned int scan_bus(struct device *busdev, unsigned int max)
return new_max; return new_max;
} }
void scan_bridges(struct bus *bus)
{
struct device *child;
unsigned int max = bus->secondary;
for (child = bus->children; child; child = child->sibling) {
if (!child->ops || !child->ops->scan_bus)
continue;
max = scan_bus(child, max);
}
bus->subordinate = max;
}
/** /**
* Determine the existence of devices and extend the device tree. * Determine the existence of devices and extend the device tree.
* *

View File

@ -1083,7 +1083,6 @@ void pci_scan_bus(struct bus *bus, unsigned min_devfn,
{ {
unsigned int devfn; unsigned int devfn;
struct device *old_devices; struct device *old_devices;
struct device *child;
printk(BIOS_DEBUG, "PCI: pci_scan_bus for bus %02x\n", bus->secondary); printk(BIOS_DEBUG, "PCI: pci_scan_bus for bus %02x\n", bus->secondary);
@ -1144,12 +1143,8 @@ void pci_scan_bus(struct bus *bus, unsigned min_devfn,
* For all children that implement scan_bus() (i.e. bridges) * For all children that implement scan_bus() (i.e. bridges)
* scan the bus behind that child. * scan the bus behind that child.
*/ */
unsigned int max = bus->secondary;
for (child = bus->children; child; child = child->sibling) scan_bridges(bus);
max = scan_bus(child, max);
bus->subordinate = max;
/* /*
* We've scanned the bus and so we know all about what's on the other * We've scanned the bus and so we know all about what's on the other

View File

@ -126,22 +126,14 @@ unsigned int scan_smbus(device_t bus, unsigned int passthru)
*/ */
static unsigned int root_dev_scan_bus(device_t bus, unsigned int passthru) static unsigned int root_dev_scan_bus(device_t bus, unsigned int passthru)
{ {
device_t child;
struct bus *link; struct bus *link;
unsigned int max = 0;
printk(BIOS_SPEW, "%s for %s\n", __func__, dev_path(bus)); printk(BIOS_SPEW, "%s for %s\n", __func__, dev_path(bus));
scan_static_bus(bus, 0); scan_static_bus(bus, 0);
for (link = bus->link_list; link; link = link->next) { for (link = bus->link_list; link; link = link->next)
for (child = link->children; child; child = child->sibling) { scan_bridges(link);
if (!child->ops || !child->ops->scan_bus)
continue;
printk(BIOS_SPEW, "%s scanning...\n", dev_path(child));
max = scan_bus(child, max);
}
}
printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus)); printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));

View File

@ -172,7 +172,7 @@ void dev_finalize_chips(void);
/* Generic device helper functions */ /* Generic device helper functions */
int reset_bus(struct bus *bus); int reset_bus(struct bus *bus);
unsigned int scan_bus(struct device *bus, unsigned int _max); void scan_bridges(struct bus *bus);
void assign_resources(struct bus *bus); void assign_resources(struct bus *bus);
const char *dev_name(device_t dev); const char *dev_name(device_t dev);
const char *dev_path(device_t dev); const char *dev_path(device_t dev);