diff options
-rw-r--r-- | Documentation/pci.txt | 5 | ||||
-rw-r--r-- | drivers/ata/pata_cs5530.c | 2 | ||||
-rw-r--r-- | drivers/ide/pci/cs5530.c | 2 | ||||
-rw-r--r-- | drivers/net/cassini.c | 4 | ||||
-rw-r--r-- | drivers/net/starfire.c | 2 | ||||
-rw-r--r-- | drivers/net/tulip/tulip_core.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/prism54/islpci_hotplug.c | 3 | ||||
-rw-r--r-- | drivers/pci/pci.c | 28 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 5 | ||||
-rw-r--r-- | drivers/usb/gadget/net2280.c | 2 | ||||
-rw-r--r-- | include/linux/pci.h | 1 |
11 files changed, 38 insertions, 18 deletions
diff --git a/Documentation/pci.txt b/Documentation/pci.txt index 7d3da30ff0b4..7754f5aea4e9 100644 --- a/Documentation/pci.txt +++ b/Documentation/pci.txt | |||
@@ -296,7 +296,10 @@ If the PCI device can use the PCI Memory-Write-Invalidate transaction, | |||
296 | call pci_set_mwi(). This enables the PCI_COMMAND bit for Mem-Wr-Inval | 296 | call pci_set_mwi(). This enables the PCI_COMMAND bit for Mem-Wr-Inval |
297 | and also ensures that the cache line size register is set correctly. | 297 | and also ensures that the cache line size register is set correctly. |
298 | Check the return value of pci_set_mwi() as not all architectures | 298 | Check the return value of pci_set_mwi() as not all architectures |
299 | or chip-sets may support Memory-Write-Invalidate. | 299 | or chip-sets may support Memory-Write-Invalidate. Alternatively, |
300 | if Mem-Wr-Inval would be nice to have but is not required, call | ||
301 | pci_try_set_mwi() to have the system do its best effort at enabling | ||
302 | Mem-Wr-Inval. | ||
300 | 303 | ||
301 | 304 | ||
302 | 3.2 Request MMIO/IOP resources | 305 | 3.2 Request MMIO/IOP resources |
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c index 3fca5898642b..68f150a1e2f4 100644 --- a/drivers/ata/pata_cs5530.c +++ b/drivers/ata/pata_cs5530.c | |||
@@ -266,7 +266,7 @@ static int cs5530_init_chip(void) | |||
266 | } | 266 | } |
267 | 267 | ||
268 | pci_set_master(cs5530_0); | 268 | pci_set_master(cs5530_0); |
269 | pci_set_mwi(cs5530_0); | 269 | pci_try_set_mwi(cs5530_0); |
270 | 270 | ||
271 | /* | 271 | /* |
272 | * Set PCI CacheLineSize to 16-bytes: | 272 | * Set PCI CacheLineSize to 16-bytes: |
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index 1eec1f308d16..b5c00d15a704 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
@@ -236,7 +236,7 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch | |||
236 | */ | 236 | */ |
237 | 237 | ||
238 | pci_set_master(cs5530_0); | 238 | pci_set_master(cs5530_0); |
239 | pci_set_mwi(cs5530_0); | 239 | pci_try_set_mwi(cs5530_0); |
240 | 240 | ||
241 | /* | 241 | /* |
242 | * Set PCI CacheLineSize to 16-bytes: | 242 | * Set PCI CacheLineSize to 16-bytes: |
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index 805924fc077a..f6e4030c73d1 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c | |||
@@ -4917,13 +4917,13 @@ static int __devinit cas_init_one(struct pci_dev *pdev, | |||
4917 | pci_cmd &= ~PCI_COMMAND_SERR; | 4917 | pci_cmd &= ~PCI_COMMAND_SERR; |
4918 | pci_cmd |= PCI_COMMAND_PARITY; | 4918 | pci_cmd |= PCI_COMMAND_PARITY; |
4919 | pci_write_config_word(pdev, PCI_COMMAND, pci_cmd); | 4919 | pci_write_config_word(pdev, PCI_COMMAND, pci_cmd); |
4920 | if (pci_set_mwi(pdev)) | 4920 | if (pci_try_set_mwi(pdev)) |
4921 | printk(KERN_WARNING PFX "Could not enable MWI for %s\n", | 4921 | printk(KERN_WARNING PFX "Could not enable MWI for %s\n", |
4922 | pci_name(pdev)); | 4922 | pci_name(pdev)); |
4923 | 4923 | ||
4924 | /* | 4924 | /* |
4925 | * On some architectures, the default cache line size set | 4925 | * On some architectures, the default cache line size set |
4926 | * by pci_set_mwi reduces perforamnce. We have to increase | 4926 | * by pci_try_set_mwi reduces perforamnce. We have to increase |
4927 | * it for this case. To start, we'll print some configuration | 4927 | * it for this case. To start, we'll print some configuration |
4928 | * data. | 4928 | * data. |
4929 | */ | 4929 | */ |
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 786d4b9c07ec..2f69d5c5dfa6 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c | |||
@@ -740,7 +740,7 @@ static int __devinit starfire_init_one(struct pci_dev *pdev, | |||
740 | pci_set_master(pdev); | 740 | pci_set_master(pdev); |
741 | 741 | ||
742 | /* enable MWI -- it vastly improves Rx performance on sparc64 */ | 742 | /* enable MWI -- it vastly improves Rx performance on sparc64 */ |
743 | pci_set_mwi(pdev); | 743 | pci_try_set_mwi(pdev); |
744 | 744 | ||
745 | #ifdef ZEROCOPY | 745 | #ifdef ZEROCOPY |
746 | /* Starfire can do TCP/UDP checksumming */ | 746 | /* Starfire can do TCP/UDP checksumming */ |
diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index 1a9e911b86a2..7dcd138b0fed 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c | |||
@@ -1155,7 +1155,7 @@ static void __devinit tulip_mwi_config (struct pci_dev *pdev, | |||
1155 | /* set or disable MWI in the standard PCI command bit. | 1155 | /* set or disable MWI in the standard PCI command bit. |
1156 | * Check for the case where mwi is desired but not available | 1156 | * Check for the case where mwi is desired but not available |
1157 | */ | 1157 | */ |
1158 | if (csr0 & MWI) pci_set_mwi(pdev); | 1158 | if (csr0 & MWI) pci_try_set_mwi(pdev); |
1159 | else pci_clear_mwi(pdev); | 1159 | else pci_clear_mwi(pdev); |
1160 | 1160 | ||
1161 | /* read result from hardware (in case bit refused to enable) */ | 1161 | /* read result from hardware (in case bit refused to enable) */ |
diff --git a/drivers/net/wireless/prism54/islpci_hotplug.c b/drivers/net/wireless/prism54/islpci_hotplug.c index 25d6c80c9bab..af2e4f2405f2 100644 --- a/drivers/net/wireless/prism54/islpci_hotplug.c +++ b/drivers/net/wireless/prism54/islpci_hotplug.c | |||
@@ -166,8 +166,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
166 | pci_set_master(pdev); | 166 | pci_set_master(pdev); |
167 | 167 | ||
168 | /* enable MWI */ | 168 | /* enable MWI */ |
169 | if (!pci_set_mwi(pdev)) | 169 | pci_try_set_mwi(pdev); |
170 | printk(KERN_INFO "%s: pci_set_mwi(pdev) succeeded\n", DRV_NAME); | ||
171 | 170 | ||
172 | /* setup the network device interface and its structure */ | 171 | /* setup the network device interface and its structure */ |
173 | if (!(ndev = islpci_setup(pdev))) { | 172 | if (!(ndev = islpci_setup(pdev))) { |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index d9fc1bd1f3e8..35fa30aa3065 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1186,6 +1186,11 @@ int pci_set_mwi(struct pci_dev *dev) | |||
1186 | return 0; | 1186 | return 0; |
1187 | } | 1187 | } |
1188 | 1188 | ||
1189 | int pci_try_set_mwi(struct pci_dev *dev) | ||
1190 | { | ||
1191 | return 0; | ||
1192 | } | ||
1193 | |||
1189 | void pci_clear_mwi(struct pci_dev *dev) | 1194 | void pci_clear_mwi(struct pci_dev *dev) |
1190 | { | 1195 | { |
1191 | } | 1196 | } |
@@ -1242,9 +1247,7 @@ pci_set_cacheline_size(struct pci_dev *dev) | |||
1242 | * pci_set_mwi - enables memory-write-invalidate PCI transaction | 1247 | * pci_set_mwi - enables memory-write-invalidate PCI transaction |
1243 | * @dev: the PCI device for which MWI is enabled | 1248 | * @dev: the PCI device for which MWI is enabled |
1244 | * | 1249 | * |
1245 | * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND, | 1250 | * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. |
1246 | * and then calls @pcibios_set_mwi to do the needed arch specific | ||
1247 | * operations or a generic mwi-prep function. | ||
1248 | * | 1251 | * |
1249 | * RETURNS: An appropriate -ERRNO error value on error, or zero for success. | 1252 | * RETURNS: An appropriate -ERRNO error value on error, or zero for success. |
1250 | */ | 1253 | */ |
@@ -1260,7 +1263,8 @@ pci_set_mwi(struct pci_dev *dev) | |||
1260 | 1263 | ||
1261 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | 1264 | pci_read_config_word(dev, PCI_COMMAND, &cmd); |
1262 | if (! (cmd & PCI_COMMAND_INVALIDATE)) { | 1265 | if (! (cmd & PCI_COMMAND_INVALIDATE)) { |
1263 | pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev)); | 1266 | pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", |
1267 | pci_name(dev)); | ||
1264 | cmd |= PCI_COMMAND_INVALIDATE; | 1268 | cmd |= PCI_COMMAND_INVALIDATE; |
1265 | pci_write_config_word(dev, PCI_COMMAND, cmd); | 1269 | pci_write_config_word(dev, PCI_COMMAND, cmd); |
1266 | } | 1270 | } |
@@ -1269,6 +1273,21 @@ pci_set_mwi(struct pci_dev *dev) | |||
1269 | } | 1273 | } |
1270 | 1274 | ||
1271 | /** | 1275 | /** |
1276 | * pci_try_set_mwi - enables memory-write-invalidate PCI transaction | ||
1277 | * @dev: the PCI device for which MWI is enabled | ||
1278 | * | ||
1279 | * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. | ||
1280 | * Callers are not required to check the return value. | ||
1281 | * | ||
1282 | * RETURNS: An appropriate -ERRNO error value on error, or zero for success. | ||
1283 | */ | ||
1284 | int pci_try_set_mwi(struct pci_dev *dev) | ||
1285 | { | ||
1286 | int rc = pci_set_mwi(dev); | ||
1287 | return rc; | ||
1288 | } | ||
1289 | |||
1290 | /** | ||
1272 | * pci_clear_mwi - disables Memory-Write-Invalidate for device dev | 1291 | * pci_clear_mwi - disables Memory-Write-Invalidate for device dev |
1273 | * @dev: the PCI device to disable | 1292 | * @dev: the PCI device to disable |
1274 | * | 1293 | * |
@@ -1600,6 +1619,7 @@ EXPORT_SYMBOL(pci_release_selected_regions); | |||
1600 | EXPORT_SYMBOL(pci_request_selected_regions); | 1619 | EXPORT_SYMBOL(pci_request_selected_regions); |
1601 | EXPORT_SYMBOL(pci_set_master); | 1620 | EXPORT_SYMBOL(pci_set_master); |
1602 | EXPORT_SYMBOL(pci_set_mwi); | 1621 | EXPORT_SYMBOL(pci_set_mwi); |
1622 | EXPORT_SYMBOL(pci_try_set_mwi); | ||
1603 | EXPORT_SYMBOL(pci_clear_mwi); | 1623 | EXPORT_SYMBOL(pci_clear_mwi); |
1604 | EXPORT_SYMBOL_GPL(pci_intx); | 1624 | EXPORT_SYMBOL_GPL(pci_intx); |
1605 | EXPORT_SYMBOL(pci_set_dma_mask); | 1625 | EXPORT_SYMBOL(pci_set_dma_mask); |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index dcb4ba0ecee1..955b2e48d041 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -1578,10 +1578,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid) | |||
1578 | INIT_LIST_HEAD(&phba->fc_nodes); | 1578 | INIT_LIST_HEAD(&phba->fc_nodes); |
1579 | 1579 | ||
1580 | pci_set_master(pdev); | 1580 | pci_set_master(pdev); |
1581 | retval = pci_set_mwi(pdev); | 1581 | pci_try_set_mwi(pdev); |
1582 | if (retval) | ||
1583 | dev_printk(KERN_WARNING, &pdev->dev, | ||
1584 | "Warning: pci_set_mwi returned %d\n", retval); | ||
1585 | 1582 | ||
1586 | if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0) | 1583 | if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0) |
1587 | if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0) | 1584 | if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0) |
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index d975ecf18e00..00fda334dc72 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c | |||
@@ -2964,7 +2964,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id) | |||
2964 | , &dev->pci->pcimstctl); | 2964 | , &dev->pci->pcimstctl); |
2965 | /* erratum 0115 shouldn't appear: Linux inits PCI_LATENCY_TIMER */ | 2965 | /* erratum 0115 shouldn't appear: Linux inits PCI_LATENCY_TIMER */ |
2966 | pci_set_master (pdev); | 2966 | pci_set_master (pdev); |
2967 | pci_set_mwi (pdev); | 2967 | pci_try_set_mwi (pdev); |
2968 | 2968 | ||
2969 | /* ... also flushes any posted pci writes */ | 2969 | /* ... also flushes any posted pci writes */ |
2970 | dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; | 2970 | dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; |
diff --git a/include/linux/pci.h b/include/linux/pci.h index a6657b7f245d..a5602e26f4dd 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -545,6 +545,7 @@ void pci_set_master(struct pci_dev *dev); | |||
545 | int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); | 545 | int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); |
546 | #define HAVE_PCI_SET_MWI | 546 | #define HAVE_PCI_SET_MWI |
547 | int __must_check pci_set_mwi(struct pci_dev *dev); | 547 | int __must_check pci_set_mwi(struct pci_dev *dev); |
548 | int pci_try_set_mwi(struct pci_dev *dev); | ||
548 | void pci_clear_mwi(struct pci_dev *dev); | 549 | void pci_clear_mwi(struct pci_dev *dev); |
549 | void pci_intx(struct pci_dev *dev, int enable); | 550 | void pci_intx(struct pci_dev *dev, int enable); |
550 | void pci_msi_off(struct pci_dev *dev); | 551 | void pci_msi_off(struct pci_dev *dev); |