aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/pci.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 5c80b59c5931..1531f3a49879 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2576,15 +2576,14 @@ EXPORT_SYMBOL_GPL(pci_reset_function);
2576 */ 2576 */
2577int pcix_get_max_mmrbc(struct pci_dev *dev) 2577int pcix_get_max_mmrbc(struct pci_dev *dev)
2578{ 2578{
2579 int err, cap; 2579 int cap;
2580 u32 stat; 2580 u32 stat;
2581 2581
2582 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 2582 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
2583 if (!cap) 2583 if (!cap)
2584 return -EINVAL; 2584 return -EINVAL;
2585 2585
2586 err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); 2586 if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
2587 if (err)
2588 return -EINVAL; 2587 return -EINVAL;
2589 2588
2590 return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21); 2589 return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
@@ -2600,18 +2599,17 @@ EXPORT_SYMBOL(pcix_get_max_mmrbc);
2600 */ 2599 */
2601int pcix_get_mmrbc(struct pci_dev *dev) 2600int pcix_get_mmrbc(struct pci_dev *dev)
2602{ 2601{
2603 int ret, cap; 2602 int cap;
2604 u16 cmd; 2603 u16 cmd;
2605 2604
2606 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 2605 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
2607 if (!cap) 2606 if (!cap)
2608 return -EINVAL; 2607 return -EINVAL;
2609 2608
2610 ret = pci_read_config_word(dev, cap + PCI_X_CMD, &cmd); 2609 if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
2611 if (!ret) 2610 return -EINVAL;
2612 ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
2613 2611
2614 return ret; 2612 return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
2615} 2613}
2616EXPORT_SYMBOL(pcix_get_mmrbc); 2614EXPORT_SYMBOL(pcix_get_mmrbc);
2617 2615
@@ -2626,29 +2624,27 @@ EXPORT_SYMBOL(pcix_get_mmrbc);
2626 */ 2624 */
2627int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc) 2625int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
2628{ 2626{
2629 int cap, err = -EINVAL; 2627 int cap;
2630 u32 stat, v, o; 2628 u32 stat, v, o;
2631 u16 cmd; 2629 u16 cmd;
2632 2630
2633 if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc)) 2631 if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
2634 goto out; 2632 return -EINVAL;
2635 2633
2636 v = ffs(mmrbc) - 10; 2634 v = ffs(mmrbc) - 10;
2637 2635
2638 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 2636 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
2639 if (!cap) 2637 if (!cap)
2640 goto out; 2638 return -EINVAL;
2641 2639
2642 err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); 2640 if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
2643 if (err) 2641 return -EINVAL;
2644 goto out;
2645 2642
2646 if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21) 2643 if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
2647 return -E2BIG; 2644 return -E2BIG;
2648 2645
2649 err = pci_read_config_word(dev, cap + PCI_X_CMD, &cmd); 2646 if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
2650 if (err) 2647 return -EINVAL;
2651 goto out;
2652 2648
2653 o = (cmd & PCI_X_CMD_MAX_READ) >> 2; 2649 o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
2654 if (o != v) { 2650 if (o != v) {
@@ -2658,10 +2654,10 @@ int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
2658 2654
2659 cmd &= ~PCI_X_CMD_MAX_READ; 2655 cmd &= ~PCI_X_CMD_MAX_READ;
2660 cmd |= v << 2; 2656 cmd |= v << 2;
2661 err = pci_write_config_word(dev, cap + PCI_X_CMD, cmd); 2657 if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
2658 return -EIO;
2662 } 2659 }
2663out: 2660 return 0;
2664 return err;
2665} 2661}
2666EXPORT_SYMBOL(pcix_set_mmrbc); 2662EXPORT_SYMBOL(pcix_set_mmrbc);
2667 2663