diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/Makefile | 22 | ||||
-rw-r--r-- | drivers/pci/hotplug/cpqphp_core.c | 4 | ||||
-rw-r--r-- | drivers/pci/pci.c | 50 |
3 files changed, 39 insertions, 37 deletions
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile index 17d2b07ee67c..e2501ac6fe84 100644 --- a/drivers/pci/Makefile +++ b/drivers/pci/Makefile | |||
@@ -33,21 +33,15 @@ obj-$(CONFIG_PCI_IOV) += iov.o | |||
33 | # | 33 | # |
34 | # Some architectures use the generic PCI setup functions | 34 | # Some architectures use the generic PCI setup functions |
35 | # | 35 | # |
36 | obj-$(CONFIG_X86) += setup-bus.o | 36 | obj-$(CONFIG_ALPHA) += setup-irq.o |
37 | obj-$(CONFIG_ALPHA) += setup-bus.o setup-irq.o | 37 | obj-$(CONFIG_ARM) += setup-irq.o |
38 | obj-$(CONFIG_ARM) += setup-bus.o setup-irq.o | 38 | obj-$(CONFIG_UNICORE32) += setup-irq.o |
39 | obj-$(CONFIG_UNICORE32) += setup-bus.o setup-irq.o | 39 | obj-$(CONFIG_SUPERH) += setup-irq.o |
40 | obj-$(CONFIG_PARISC) += setup-bus.o | 40 | obj-$(CONFIG_MIPS) += setup-irq.o |
41 | obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o | ||
42 | obj-$(CONFIG_PPC) += setup-bus.o | ||
43 | obj-$(CONFIG_FRV) += setup-bus.o | ||
44 | obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o | ||
45 | obj-$(CONFIG_X86_VISWS) += setup-irq.o | 41 | obj-$(CONFIG_X86_VISWS) += setup-irq.o |
46 | obj-$(CONFIG_MN10300) += setup-bus.o | 42 | obj-$(CONFIG_TILE) += setup-irq.o |
47 | obj-$(CONFIG_MICROBLAZE) += setup-bus.o | 43 | obj-$(CONFIG_SPARC_LEON) += setup-irq.o |
48 | obj-$(CONFIG_TILE) += setup-bus.o setup-irq.o | 44 | obj-$(CONFIG_M68K) += setup-irq.o |
49 | obj-$(CONFIG_SPARC_LEON) += setup-bus.o setup-irq.o | ||
50 | obj-$(CONFIG_M68K) += setup-bus.o setup-irq.o | ||
51 | 45 | ||
52 | # | 46 | # |
53 | # ACPI Related PCI FW Functions | 47 | # ACPI Related PCI FW Functions |
diff --git a/drivers/pci/hotplug/cpqphp_core.c b/drivers/pci/hotplug/cpqphp_core.c index 31273e155e6c..037e2612c5bd 100644 --- a/drivers/pci/hotplug/cpqphp_core.c +++ b/drivers/pci/hotplug/cpqphp_core.c | |||
@@ -920,12 +920,12 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
920 | bus->max_bus_speed = PCI_SPEED_100MHz_PCIX; | 920 | bus->max_bus_speed = PCI_SPEED_100MHz_PCIX; |
921 | break; | 921 | break; |
922 | } | 922 | } |
923 | if (bus_cap & 20) { | 923 | if (bus_cap & 0x20) { |
924 | dbg("bus max supports 66MHz PCI-X\n"); | 924 | dbg("bus max supports 66MHz PCI-X\n"); |
925 | bus->max_bus_speed = PCI_SPEED_66MHz_PCIX; | 925 | bus->max_bus_speed = PCI_SPEED_66MHz_PCIX; |
926 | break; | 926 | break; |
927 | } | 927 | } |
928 | if (bus_cap & 10) { | 928 | if (bus_cap & 0x10) { |
929 | dbg("bus max supports 66MHz PCI\n"); | 929 | dbg("bus max supports 66MHz PCI\n"); |
930 | bus->max_bus_speed = PCI_SPEED_66MHz; | 930 | bus->max_bus_speed = PCI_SPEED_66MHz; |
931 | break; | 931 | break; |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e4d45d27f288..b6ddde1d04ca 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1181,6 +1181,8 @@ EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state); | |||
1181 | static int do_pci_enable_device(struct pci_dev *dev, int bars) | 1181 | static int do_pci_enable_device(struct pci_dev *dev, int bars) |
1182 | { | 1182 | { |
1183 | int err; | 1183 | int err; |
1184 | u16 cmd; | ||
1185 | u8 pin; | ||
1184 | 1186 | ||
1185 | err = pci_set_power_state(dev, PCI_D0); | 1187 | err = pci_set_power_state(dev, PCI_D0); |
1186 | if (err < 0 && err != -EIO) | 1188 | if (err < 0 && err != -EIO) |
@@ -1190,6 +1192,14 @@ static int do_pci_enable_device(struct pci_dev *dev, int bars) | |||
1190 | return err; | 1192 | return err; |
1191 | pci_fixup_device(pci_fixup_enable, dev); | 1193 | pci_fixup_device(pci_fixup_enable, dev); |
1192 | 1194 | ||
1195 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); | ||
1196 | if (pin) { | ||
1197 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | ||
1198 | if (cmd & PCI_COMMAND_INTX_DISABLE) | ||
1199 | pci_write_config_word(dev, PCI_COMMAND, | ||
1200 | cmd & ~PCI_COMMAND_INTX_DISABLE); | ||
1201 | } | ||
1202 | |||
1193 | return 0; | 1203 | return 0; |
1194 | } | 1204 | } |
1195 | 1205 | ||
@@ -1611,29 +1621,27 @@ static void pci_pme_list_scan(struct work_struct *work) | |||
1611 | struct pci_pme_device *pme_dev, *n; | 1621 | struct pci_pme_device *pme_dev, *n; |
1612 | 1622 | ||
1613 | mutex_lock(&pci_pme_list_mutex); | 1623 | mutex_lock(&pci_pme_list_mutex); |
1614 | if (!list_empty(&pci_pme_list)) { | 1624 | list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) { |
1615 | list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) { | 1625 | if (pme_dev->dev->pme_poll) { |
1616 | if (pme_dev->dev->pme_poll) { | 1626 | struct pci_dev *bridge; |
1617 | struct pci_dev *bridge; | 1627 | |
1618 | 1628 | bridge = pme_dev->dev->bus->self; | |
1619 | bridge = pme_dev->dev->bus->self; | 1629 | /* |
1620 | /* | 1630 | * If bridge is in low power state, the |
1621 | * If bridge is in low power state, the | 1631 | * configuration space of subordinate devices |
1622 | * configuration space of subordinate devices | 1632 | * may be not accessible |
1623 | * may be not accessible | 1633 | */ |
1624 | */ | 1634 | if (bridge && bridge->current_state != PCI_D0) |
1625 | if (bridge && bridge->current_state != PCI_D0) | 1635 | continue; |
1626 | continue; | 1636 | pci_pme_wakeup(pme_dev->dev, NULL); |
1627 | pci_pme_wakeup(pme_dev->dev, NULL); | 1637 | } else { |
1628 | } else { | 1638 | list_del(&pme_dev->list); |
1629 | list_del(&pme_dev->list); | 1639 | kfree(pme_dev); |
1630 | kfree(pme_dev); | ||
1631 | } | ||
1632 | } | 1640 | } |
1633 | if (!list_empty(&pci_pme_list)) | ||
1634 | schedule_delayed_work(&pci_pme_work, | ||
1635 | msecs_to_jiffies(PME_TIMEOUT)); | ||
1636 | } | 1641 | } |
1642 | if (!list_empty(&pci_pme_list)) | ||
1643 | schedule_delayed_work(&pci_pme_work, | ||
1644 | msecs_to_jiffies(PME_TIMEOUT)); | ||
1637 | mutex_unlock(&pci_pme_list_mutex); | 1645 | mutex_unlock(&pci_pme_list_mutex); |
1638 | } | 1646 | } |
1639 | 1647 | ||