diff options
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r-- | drivers/pci/pci.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index bdd64b1b4817..b127fbda6fc8 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1148,18 +1148,16 @@ int pci_reenable_device(struct pci_dev *dev) | |||
1148 | 1148 | ||
1149 | static void pci_enable_bridge(struct pci_dev *dev) | 1149 | static void pci_enable_bridge(struct pci_dev *dev) |
1150 | { | 1150 | { |
1151 | struct pci_dev *bridge; | ||
1151 | int retval; | 1152 | int retval; |
1152 | 1153 | ||
1153 | if (!dev) | 1154 | bridge = pci_upstream_bridge(dev); |
1154 | return; | 1155 | if (bridge) |
1155 | 1156 | pci_enable_bridge(bridge); | |
1156 | pci_enable_bridge(dev->bus->self); | ||
1157 | 1157 | ||
1158 | if (pci_is_enabled(dev)) { | 1158 | if (pci_is_enabled(dev)) { |
1159 | if (!dev->is_busmaster) { | 1159 | if (!dev->is_busmaster) |
1160 | dev_warn(&dev->dev, "driver skip pci_set_master, fix it!\n"); | ||
1161 | pci_set_master(dev); | 1160 | pci_set_master(dev); |
1162 | } | ||
1163 | return; | 1161 | return; |
1164 | } | 1162 | } |
1165 | 1163 | ||
@@ -1172,6 +1170,7 @@ static void pci_enable_bridge(struct pci_dev *dev) | |||
1172 | 1170 | ||
1173 | static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) | 1171 | static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) |
1174 | { | 1172 | { |
1173 | struct pci_dev *bridge; | ||
1175 | int err; | 1174 | int err; |
1176 | int i, bars = 0; | 1175 | int i, bars = 0; |
1177 | 1176 | ||
@@ -1190,7 +1189,9 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) | |||
1190 | if (atomic_inc_return(&dev->enable_cnt) > 1) | 1189 | if (atomic_inc_return(&dev->enable_cnt) > 1) |
1191 | return 0; /* already enabled */ | 1190 | return 0; /* already enabled */ |
1192 | 1191 | ||
1193 | pci_enable_bridge(dev->bus->self); | 1192 | bridge = pci_upstream_bridge(dev); |
1193 | if (bridge) | ||
1194 | pci_enable_bridge(bridge); | ||
1194 | 1195 | ||
1195 | /* only skip sriov related */ | 1196 | /* only skip sriov related */ |
1196 | for (i = 0; i <= PCI_ROM_RESOURCE; i++) | 1197 | for (i = 0; i <= PCI_ROM_RESOURCE; i++) |
@@ -1644,8 +1645,10 @@ void pci_pme_active(struct pci_dev *dev, bool enable) | |||
1644 | if (enable) { | 1645 | if (enable) { |
1645 | pme_dev = kmalloc(sizeof(struct pci_pme_device), | 1646 | pme_dev = kmalloc(sizeof(struct pci_pme_device), |
1646 | GFP_KERNEL); | 1647 | GFP_KERNEL); |
1647 | if (!pme_dev) | 1648 | if (!pme_dev) { |
1648 | goto out; | 1649 | dev_warn(&dev->dev, "can't enable PME#\n"); |
1650 | return; | ||
1651 | } | ||
1649 | pme_dev->dev = dev; | 1652 | pme_dev->dev = dev; |
1650 | mutex_lock(&pci_pme_list_mutex); | 1653 | mutex_lock(&pci_pme_list_mutex); |
1651 | list_add(&pme_dev->list, &pci_pme_list); | 1654 | list_add(&pme_dev->list, &pci_pme_list); |
@@ -1666,7 +1669,6 @@ void pci_pme_active(struct pci_dev *dev, bool enable) | |||
1666 | } | 1669 | } |
1667 | } | 1670 | } |
1668 | 1671 | ||
1669 | out: | ||
1670 | dev_dbg(&dev->dev, "PME# %s\n", enable ? "enabled" : "disabled"); | 1672 | dev_dbg(&dev->dev, "PME# %s\n", enable ? "enabled" : "disabled"); |
1671 | } | 1673 | } |
1672 | 1674 | ||
@@ -2860,7 +2862,7 @@ void __weak pcibios_set_master(struct pci_dev *dev) | |||
2860 | lat = pcibios_max_latency; | 2862 | lat = pcibios_max_latency; |
2861 | else | 2863 | else |
2862 | return; | 2864 | return; |
2863 | dev_printk(KERN_DEBUG, &dev->dev, "setting latency timer to %d\n", lat); | 2865 | |
2864 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); | 2866 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); |
2865 | } | 2867 | } |
2866 | 2868 | ||
@@ -3978,6 +3980,7 @@ int pcie_get_mps(struct pci_dev *dev) | |||
3978 | 3980 | ||
3979 | return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5); | 3981 | return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5); |
3980 | } | 3982 | } |
3983 | EXPORT_SYMBOL(pcie_get_mps); | ||
3981 | 3984 | ||
3982 | /** | 3985 | /** |
3983 | * pcie_set_mps - set PCI Express maximum payload size | 3986 | * pcie_set_mps - set PCI Express maximum payload size |
@@ -4002,6 +4005,7 @@ int pcie_set_mps(struct pci_dev *dev, int mps) | |||
4002 | return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL, | 4005 | return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL, |
4003 | PCI_EXP_DEVCTL_PAYLOAD, v); | 4006 | PCI_EXP_DEVCTL_PAYLOAD, v); |
4004 | } | 4007 | } |
4008 | EXPORT_SYMBOL(pcie_set_mps); | ||
4005 | 4009 | ||
4006 | /** | 4010 | /** |
4007 | * pcie_get_minimum_link - determine minimum link settings of a PCI device | 4011 | * pcie_get_minimum_link - determine minimum link settings of a PCI device |