mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
crypto: cavium - switch to pci_alloc_irq_vectors
pci_enable_msix has been long deprecated, but this driver adds a new instance. Convert it to pci_alloc_irq_vectors and greatly simplify the code. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
f4f228bff3
commit
613844e811
@ -51,11 +51,6 @@ struct cpt_device {
|
|||||||
struct cpt_vf_info vfinfo[CPT_MAX_VF_NUM]; /* Per VF info */
|
struct cpt_vf_info vfinfo[CPT_MAX_VF_NUM]; /* Per VF info */
|
||||||
|
|
||||||
void __iomem *reg_base; /* Register start address */
|
void __iomem *reg_base; /* Register start address */
|
||||||
/* MSI-X */
|
|
||||||
u8 num_vec;
|
|
||||||
bool msix_enabled;
|
|
||||||
struct msix_entry msix_entries[CPT_PF_MSIX_VECTORS];
|
|
||||||
bool irq_allocated[CPT_PF_MSIX_VECTORS];
|
|
||||||
struct pci_dev *pdev; /* pci device handle */
|
struct pci_dev *pdev; /* pci device handle */
|
||||||
|
|
||||||
struct microcode mcode[CPT_MAX_CORE_GROUPS];
|
struct microcode mcode[CPT_MAX_CORE_GROUPS];
|
||||||
|
@ -332,26 +332,6 @@ static int cpt_ucode_load(struct cpt_device *cpt)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpt_enable_msix(struct cpt_device *cpt)
|
|
||||||
{
|
|
||||||
int i, ret;
|
|
||||||
|
|
||||||
cpt->num_vec = CPT_PF_MSIX_VECTORS;
|
|
||||||
|
|
||||||
for (i = 0; i < cpt->num_vec; i++)
|
|
||||||
cpt->msix_entries[i].entry = i;
|
|
||||||
|
|
||||||
ret = pci_enable_msix(cpt->pdev, cpt->msix_entries, cpt->num_vec);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&cpt->pdev->dev, "Request for #%d msix vectors failed\n",
|
|
||||||
cpt->num_vec);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpt->msix_enabled = 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static irqreturn_t cpt_mbx0_intr_handler(int irq, void *cpt_irq)
|
static irqreturn_t cpt_mbx0_intr_handler(int irq, void *cpt_irq)
|
||||||
{
|
{
|
||||||
struct cpt_device *cpt = (struct cpt_device *)cpt_irq;
|
struct cpt_device *cpt = (struct cpt_device *)cpt_irq;
|
||||||
@ -361,26 +341,6 @@ static irqreturn_t cpt_mbx0_intr_handler(int irq, void *cpt_irq)
|
|||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cpt_disable_msix(struct cpt_device *cpt)
|
|
||||||
{
|
|
||||||
if (cpt->msix_enabled) {
|
|
||||||
pci_disable_msix(cpt->pdev);
|
|
||||||
cpt->msix_enabled = 0;
|
|
||||||
cpt->num_vec = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cpt_free_all_interrupts(struct cpt_device *cpt)
|
|
||||||
{
|
|
||||||
int irq;
|
|
||||||
|
|
||||||
for (irq = 0; irq < cpt->num_vec; irq++) {
|
|
||||||
if (cpt->irq_allocated[irq])
|
|
||||||
free_irq(cpt->msix_entries[irq].vector, cpt);
|
|
||||||
cpt->irq_allocated[irq] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cpt_reset(struct cpt_device *cpt)
|
static void cpt_reset(struct cpt_device *cpt)
|
||||||
{
|
{
|
||||||
cpt_write_csr64(cpt->reg_base, CPTX_PF_RESET(0), 1);
|
cpt_write_csr64(cpt->reg_base, CPTX_PF_RESET(0), 1);
|
||||||
@ -506,32 +466,34 @@ static int cpt_register_interrupts(struct cpt_device *cpt)
|
|||||||
struct device *dev = &cpt->pdev->dev;
|
struct device *dev = &cpt->pdev->dev;
|
||||||
|
|
||||||
/* Enable MSI-X */
|
/* Enable MSI-X */
|
||||||
ret = cpt_enable_msix(cpt);
|
ret = pci_alloc_irq_vectors(cpt->pdev, CPT_PF_MSIX_VECTORS,
|
||||||
if (ret)
|
CPT_PF_MSIX_VECTORS, PCI_IRQ_MSIX);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(&cpt->pdev->dev, "Request for #%d msix vectors failed\n",
|
||||||
|
CPT_PF_MSIX_VECTORS);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Register mailbox interrupt handlers */
|
/* Register mailbox interrupt handlers */
|
||||||
ret = request_irq(cpt->msix_entries[CPT_PF_INT_VEC_E_MBOXX(0)].vector,
|
ret = request_irq(pci_irq_vector(cpt->pdev, CPT_PF_INT_VEC_E_MBOXX(0)),
|
||||||
cpt_mbx0_intr_handler, 0, "CPT Mbox0", cpt);
|
cpt_mbx0_intr_handler, 0, "CPT Mbox0", cpt);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
cpt->irq_allocated[CPT_PF_INT_VEC_E_MBOXX(0)] = true;
|
|
||||||
|
|
||||||
/* Enable mailbox interrupt */
|
/* Enable mailbox interrupt */
|
||||||
cpt_enable_mbox_interrupts(cpt);
|
cpt_enable_mbox_interrupts(cpt);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
dev_err(dev, "Request irq failed\n");
|
dev_err(dev, "Request irq failed\n");
|
||||||
cpt_free_all_interrupts(cpt);
|
pci_disable_msix(cpt->pdev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cpt_unregister_interrupts(struct cpt_device *cpt)
|
static void cpt_unregister_interrupts(struct cpt_device *cpt)
|
||||||
{
|
{
|
||||||
cpt_free_all_interrupts(cpt);
|
free_irq(pci_irq_vector(cpt->pdev, CPT_PF_INT_VEC_E_MBOXX(0)), cpt);
|
||||||
cpt_disable_msix(cpt);
|
pci_disable_msix(cpt->pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpt_sriov_init(struct cpt_device *cpt, int num_vfs)
|
static int cpt_sriov_init(struct cpt_device *cpt, int num_vfs)
|
||||||
|
Loading…
Reference in New Issue
Block a user