aboutsummaryrefslogtreecommitdiff
path: root/src/device/device.c
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2015-02-20 21:28:31 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2015-06-04 11:22:09 +0200
commit2d2367cd95dc6ab2dd51b1005675e42bab417769 (patch)
tree6f947cec24aa97e89b833c42297f010e740afd4c /src/device/device.c
parentde271a8f0a9b5d910ee98eeea25f71d4e1536f73 (diff)
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>
Diffstat (limited to 'src/device/device.c')
-rw-r--r--src/device/device.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/device/device.c b/src/device/device.c
index 35bb6e2cf2..a8900a69c6 100644
--- a/src/device/device.c
+++ b/src/device/device.c
@@ -916,15 +916,15 @@ int reset_bus(struct bus *bus)
* @param max Current bus number.
* @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;
int do_scan_bus;
- if (!busdev || !busdev->enabled || !busdev->ops ||
- !busdev->ops->scan_bus) {
+ if (!busdev->enabled)
return max;
- }
+
+ printk(BIOS_SPEW, "%s scanning...\n", dev_path(busdev));
post_log_path(busdev);
@@ -945,6 +945,19 @@ unsigned int scan_bus(struct device *busdev, unsigned int 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.
*