diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/setup-bus.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 54404917be9a..8f7bcf56f149 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
@@ -55,16 +55,16 @@ pbus_assign_resources_sorted(struct pci_bus *bus) | |||
55 | list_for_each_entry(dev, &bus->devices, bus_list) { | 55 | list_for_each_entry(dev, &bus->devices, bus_list) { |
56 | u16 class = dev->class >> 8; | 56 | u16 class = dev->class >> 8; |
57 | 57 | ||
58 | /* Don't touch classless devices or host bridges. */ | 58 | /* Don't touch classless devices or host bridges or ioapics. */ |
59 | if (class == PCI_CLASS_NOT_DEFINED || | 59 | if (class == PCI_CLASS_NOT_DEFINED || |
60 | class == PCI_CLASS_BRIDGE_HOST) | 60 | class == PCI_CLASS_BRIDGE_HOST) |
61 | continue; | 61 | continue; |
62 | 62 | ||
63 | /* Don't touch ioapics if it has the assigned resources. */ | 63 | /* Don't touch ioapic devices already enabled by firmware */ |
64 | if (class == PCI_CLASS_SYSTEM_PIC) { | 64 | if (class == PCI_CLASS_SYSTEM_PIC) { |
65 | res = &dev->resource[0]; | 65 | u16 command; |
66 | if (res[0].start || res[1].start || res[2].start || | 66 | pci_read_config_word(dev, PCI_COMMAND, &command); |
67 | res[3].start || res[4].start || res[5].start) | 67 | if (command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) |
68 | continue; | 68 | continue; |
69 | } | 69 | } |
70 | 70 | ||