aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/Makefile22
-rw-r--r--drivers/pci/hotplug/cpqphp_core.c4
-rw-r--r--drivers/pci/pci.c50
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#
36obj-$(CONFIG_X86) += setup-bus.o 36obj-$(CONFIG_ALPHA) += setup-irq.o
37obj-$(CONFIG_ALPHA) += setup-bus.o setup-irq.o 37obj-$(CONFIG_ARM) += setup-irq.o
38obj-$(CONFIG_ARM) += setup-bus.o setup-irq.o 38obj-$(CONFIG_UNICORE32) += setup-irq.o
39obj-$(CONFIG_UNICORE32) += setup-bus.o setup-irq.o 39obj-$(CONFIG_SUPERH) += setup-irq.o
40obj-$(CONFIG_PARISC) += setup-bus.o 40obj-$(CONFIG_MIPS) += setup-irq.o
41obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o
42obj-$(CONFIG_PPC) += setup-bus.o
43obj-$(CONFIG_FRV) += setup-bus.o
44obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
45obj-$(CONFIG_X86_VISWS) += setup-irq.o 41obj-$(CONFIG_X86_VISWS) += setup-irq.o
46obj-$(CONFIG_MN10300) += setup-bus.o 42obj-$(CONFIG_TILE) += setup-irq.o
47obj-$(CONFIG_MICROBLAZE) += setup-bus.o 43obj-$(CONFIG_SPARC_LEON) += setup-irq.o
48obj-$(CONFIG_TILE) += setup-bus.o setup-irq.o 44obj-$(CONFIG_M68K) += setup-irq.o
49obj-$(CONFIG_SPARC_LEON) += setup-bus.o setup-irq.o
50obj-$(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);
1181static int do_pci_enable_device(struct pci_dev *dev, int bars) 1181static 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