diff options
author | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
commit | 1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch) | |
tree | 152bfa5165292a8e4f06d536b6d222a68480e573 /drivers/net/ethernet/chelsio | |
parent | a2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff) | |
parent | 98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
arch/mips/net/bpf_jit.c
drivers/net/can/flexcan.c
Both the flexcan and MIPS bpf_jit conflicts were cases of simple
overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/chelsio')
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index f56b95af3fcf..eeec49540233 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | |||
@@ -6478,6 +6478,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6478 | struct port_info *pi; | 6478 | struct port_info *pi; |
6479 | bool highdma = false; | 6479 | bool highdma = false; |
6480 | struct adapter *adapter = NULL; | 6480 | struct adapter *adapter = NULL; |
6481 | void __iomem *regs; | ||
6481 | 6482 | ||
6482 | printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION); | 6483 | printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION); |
6483 | 6484 | ||
@@ -6494,19 +6495,35 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6494 | goto out_release_regions; | 6495 | goto out_release_regions; |
6495 | } | 6496 | } |
6496 | 6497 | ||
6498 | regs = pci_ioremap_bar(pdev, 0); | ||
6499 | if (!regs) { | ||
6500 | dev_err(&pdev->dev, "cannot map device registers\n"); | ||
6501 | err = -ENOMEM; | ||
6502 | goto out_disable_device; | ||
6503 | } | ||
6504 | |||
6505 | /* We control everything through one PF */ | ||
6506 | func = SOURCEPF_GET(readl(regs + PL_WHOAMI)); | ||
6507 | if (func != ent->driver_data) { | ||
6508 | iounmap(regs); | ||
6509 | pci_disable_device(pdev); | ||
6510 | pci_save_state(pdev); /* to restore SR-IOV later */ | ||
6511 | goto sriov; | ||
6512 | } | ||
6513 | |||
6497 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { | 6514 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { |
6498 | highdma = true; | 6515 | highdma = true; |
6499 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); | 6516 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); |
6500 | if (err) { | 6517 | if (err) { |
6501 | dev_err(&pdev->dev, "unable to obtain 64-bit DMA for " | 6518 | dev_err(&pdev->dev, "unable to obtain 64-bit DMA for " |
6502 | "coherent allocations\n"); | 6519 | "coherent allocations\n"); |
6503 | goto out_disable_device; | 6520 | goto out_unmap_bar0; |
6504 | } | 6521 | } |
6505 | } else { | 6522 | } else { |
6506 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); | 6523 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
6507 | if (err) { | 6524 | if (err) { |
6508 | dev_err(&pdev->dev, "no usable DMA configuration\n"); | 6525 | dev_err(&pdev->dev, "no usable DMA configuration\n"); |
6509 | goto out_disable_device; | 6526 | goto out_unmap_bar0; |
6510 | } | 6527 | } |
6511 | } | 6528 | } |
6512 | 6529 | ||
@@ -6518,7 +6535,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6518 | adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); | 6535 | adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); |
6519 | if (!adapter) { | 6536 | if (!adapter) { |
6520 | err = -ENOMEM; | 6537 | err = -ENOMEM; |
6521 | goto out_disable_device; | 6538 | goto out_unmap_bar0; |
6522 | } | 6539 | } |
6523 | 6540 | ||
6524 | adapter->workq = create_singlethread_workqueue("cxgb4"); | 6541 | adapter->workq = create_singlethread_workqueue("cxgb4"); |
@@ -6530,20 +6547,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6530 | /* PCI device has been enabled */ | 6547 | /* PCI device has been enabled */ |
6531 | adapter->flags |= DEV_ENABLED; | 6548 | adapter->flags |= DEV_ENABLED; |
6532 | 6549 | ||
6533 | adapter->regs = pci_ioremap_bar(pdev, 0); | 6550 | adapter->regs = regs; |
6534 | if (!adapter->regs) { | ||
6535 | dev_err(&pdev->dev, "cannot map device registers\n"); | ||
6536 | err = -ENOMEM; | ||
6537 | goto out_free_adapter; | ||
6538 | } | ||
6539 | |||
6540 | /* We control everything through one PF */ | ||
6541 | func = SOURCEPF_GET(readl(adapter->regs + PL_WHOAMI)); | ||
6542 | if (func != ent->driver_data) { | ||
6543 | pci_save_state(pdev); /* to restore SR-IOV later */ | ||
6544 | goto sriov; | ||
6545 | } | ||
6546 | |||
6547 | adapter->pdev = pdev; | 6551 | adapter->pdev = pdev; |
6548 | adapter->pdev_dev = &pdev->dev; | 6552 | adapter->pdev_dev = &pdev->dev; |
6549 | adapter->mbox = func; | 6553 | adapter->mbox = func; |
@@ -6560,7 +6564,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6560 | 6564 | ||
6561 | err = t4_prep_adapter(adapter); | 6565 | err = t4_prep_adapter(adapter); |
6562 | if (err) | 6566 | if (err) |
6563 | goto out_unmap_bar0; | 6567 | goto out_free_adapter; |
6568 | |||
6564 | 6569 | ||
6565 | if (!is_t4(adapter->params.chip)) { | 6570 | if (!is_t4(adapter->params.chip)) { |
6566 | s_qpp = QUEUESPERPAGEPF1 * adapter->fn; | 6571 | s_qpp = QUEUESPERPAGEPF1 * adapter->fn; |
@@ -6577,14 +6582,14 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6577 | dev_err(&pdev->dev, | 6582 | dev_err(&pdev->dev, |
6578 | "Incorrect number of egress queues per page\n"); | 6583 | "Incorrect number of egress queues per page\n"); |
6579 | err = -EINVAL; | 6584 | err = -EINVAL; |
6580 | goto out_unmap_bar0; | 6585 | goto out_free_adapter; |
6581 | } | 6586 | } |
6582 | adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2), | 6587 | adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2), |
6583 | pci_resource_len(pdev, 2)); | 6588 | pci_resource_len(pdev, 2)); |
6584 | if (!adapter->bar2) { | 6589 | if (!adapter->bar2) { |
6585 | dev_err(&pdev->dev, "cannot map device bar2 region\n"); | 6590 | dev_err(&pdev->dev, "cannot map device bar2 region\n"); |
6586 | err = -ENOMEM; | 6591 | err = -ENOMEM; |
6587 | goto out_unmap_bar0; | 6592 | goto out_free_adapter; |
6588 | } | 6593 | } |
6589 | } | 6594 | } |
6590 | 6595 | ||
@@ -6722,13 +6727,13 @@ sriov: | |||
6722 | out_unmap_bar: | 6727 | out_unmap_bar: |
6723 | if (!is_t4(adapter->params.chip)) | 6728 | if (!is_t4(adapter->params.chip)) |
6724 | iounmap(adapter->bar2); | 6729 | iounmap(adapter->bar2); |
6725 | out_unmap_bar0: | ||
6726 | iounmap(adapter->regs); | ||
6727 | out_free_adapter: | 6730 | out_free_adapter: |
6728 | if (adapter->workq) | 6731 | if (adapter->workq) |
6729 | destroy_workqueue(adapter->workq); | 6732 | destroy_workqueue(adapter->workq); |
6730 | 6733 | ||
6731 | kfree(adapter); | 6734 | kfree(adapter); |
6735 | out_unmap_bar0: | ||
6736 | iounmap(regs); | ||
6732 | out_disable_device: | 6737 | out_disable_device: |
6733 | pci_disable_pcie_error_reporting(pdev); | 6738 | pci_disable_pcie_error_reporting(pdev); |
6734 | pci_disable_device(pdev); | 6739 | pci_disable_device(pdev); |