crypto: caam - convert caam_jr_init() to use devres
Use devres to allocate all of the resources in caam_jr_init() (DMA coherent and regular memory, IRQs) drop calls to corresponding deallocation routines. No functional change intended. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Horia Geantă <horia.geanta@nxp.com> Cc: Cory Tusar <cory.tusar@zii.aero> Cc: Chris Healy <cphealy@gmail.com> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Horia Geantă <horia.geanta@nxp.com> Cc: Aymen Sghaier <aymen.sghaier@nxp.com> Cc: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Родитель
51e002e949
Коммит
a6c4194ead
|
@ -108,25 +108,12 @@ static int caam_reset_hw_jr(struct device *dev)
|
|||
static int caam_jr_shutdown(struct device *dev)
|
||||
{
|
||||
struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
|
||||
dma_addr_t inpbusaddr, outbusaddr;
|
||||
int ret;
|
||||
|
||||
ret = caam_reset_hw_jr(dev);
|
||||
|
||||
tasklet_kill(&jrp->irqtask);
|
||||
|
||||
/* Release interrupt */
|
||||
free_irq(jrp->irq, dev);
|
||||
|
||||
/* Free rings */
|
||||
inpbusaddr = rd_reg64(&jrp->rregs->inpring_base);
|
||||
outbusaddr = rd_reg64(&jrp->rregs->outring_base);
|
||||
dma_free_coherent(dev, sizeof(dma_addr_t) * JOBR_DEPTH,
|
||||
jrp->inpring, inpbusaddr);
|
||||
dma_free_coherent(dev, sizeof(struct jr_outentry) * JOBR_DEPTH,
|
||||
jrp->outring, outbusaddr);
|
||||
kfree(jrp->entinfo);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -444,8 +431,8 @@ static int caam_jr_init(struct device *dev)
|
|||
tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev);
|
||||
|
||||
/* Connect job ring interrupt handler. */
|
||||
error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED,
|
||||
dev_name(dev), dev);
|
||||
error = devm_request_irq(dev, jrp->irq, caam_jr_interrupt, IRQF_SHARED,
|
||||
dev_name(dev), dev);
|
||||
if (error) {
|
||||
dev_err(dev, "can't connect JobR %d interrupt (%d)\n",
|
||||
jrp->ridx, jrp->irq);
|
||||
|
@ -454,22 +441,25 @@ static int caam_jr_init(struct device *dev)
|
|||
|
||||
error = caam_reset_hw_jr(dev);
|
||||
if (error)
|
||||
goto out_free_irq;
|
||||
goto out_kill_deq;
|
||||
|
||||
error = -ENOMEM;
|
||||
jrp->inpring = dma_alloc_coherent(dev, sizeof(*jrp->inpring) *
|
||||
JOBR_DEPTH, &inpbusaddr, GFP_KERNEL);
|
||||
jrp->inpring = dmam_alloc_coherent(dev, sizeof(*jrp->inpring) *
|
||||
JOBR_DEPTH, &inpbusaddr,
|
||||
GFP_KERNEL);
|
||||
if (!jrp->inpring)
|
||||
goto out_free_irq;
|
||||
goto out_kill_deq;
|
||||
|
||||
jrp->outring = dma_alloc_coherent(dev, sizeof(*jrp->outring) *
|
||||
JOBR_DEPTH, &outbusaddr, GFP_KERNEL);
|
||||
jrp->outring = dmam_alloc_coherent(dev, sizeof(*jrp->outring) *
|
||||
JOBR_DEPTH, &outbusaddr,
|
||||
GFP_KERNEL);
|
||||
if (!jrp->outring)
|
||||
goto out_free_inpring;
|
||||
goto out_kill_deq;
|
||||
|
||||
jrp->entinfo = kcalloc(JOBR_DEPTH, sizeof(*jrp->entinfo), GFP_KERNEL);
|
||||
jrp->entinfo = devm_kcalloc(dev, JOBR_DEPTH, sizeof(*jrp->entinfo),
|
||||
GFP_KERNEL);
|
||||
if (!jrp->entinfo)
|
||||
goto out_free_outring;
|
||||
goto out_kill_deq;
|
||||
|
||||
for (i = 0; i < JOBR_DEPTH; i++)
|
||||
jrp->entinfo[i].desc_addr_dma = !0;
|
||||
|
@ -494,16 +484,6 @@ static int caam_jr_init(struct device *dev)
|
|||
(JOBR_INTC_TIME_THLD << JRCFG_ICTT_SHIFT));
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_outring:
|
||||
dma_free_coherent(dev, sizeof(struct jr_outentry) * JOBR_DEPTH,
|
||||
jrp->outring, outbusaddr);
|
||||
out_free_inpring:
|
||||
dma_free_coherent(dev, sizeof(dma_addr_t) * JOBR_DEPTH,
|
||||
jrp->inpring, inpbusaddr);
|
||||
dev_err(dev, "can't allocate job rings for %d\n", jrp->ridx);
|
||||
out_free_irq:
|
||||
free_irq(jrp->irq, dev);
|
||||
out_kill_deq:
|
||||
tasklet_kill(&jrp->irqtask);
|
||||
return error;
|
||||
|
|
Загрузка…
Ссылка в новой задаче