summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2003-01-12 03:44:30 -0800
committerKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>2003-01-12 03:44:30 -0800
commitbb8ffa8a08646e346057d5284d878829d0be80ea (patch)
tree058ff398bd219347e35e277546b05d7e91e39cbf
parentace0c5cb87746e6d8668df78ca550fb7bf62def0 (diff)
Always assign bus numbers for cardbus. Firmware often doesn't do it right.
-rw-r--r--drivers/pci/probe.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 687a9781ee71..ca6fb8ee5a52 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -262,7 +262,8 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max
pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
DBG("Scanning behind PCI bridge %s, config %06x, pass %d\n", dev->slot_name, buses & 0xffffff, pass);
- if ((buses & 0xffff00) && !pcibios_assign_all_busses()) {
+ if ((buses & 0xffff00) && !pcibios_assign_all_busses() && !is_cardbus) {
+ unsigned int cmax;
/*
* Bus already configured by firmware, process it in the first
* pass and just note the configuration.
@@ -274,13 +275,8 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max
child->secondary = (buses >> 8) & 0xFF;
child->subordinate = (buses >> 16) & 0xFF;
child->number = child->secondary;
- if (!is_cardbus) {
- unsigned int cmax = pci_do_scan_bus(child);
- if (cmax > max) max = cmax;
- } else {
- unsigned int cmax = child->subordinate;
- if (cmax > max) max = cmax;
- }
+ cmax = pci_do_scan_bus(child);
+ if (cmax > max) max = cmax;
} else {
/*
* We need to assign a number to this bus which we always