Commit a6c4194e authored by Andrey Smirnov's avatar Andrey Smirnov Committed by Herbert Xu

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: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
Reviewed-by: default avatarHoria 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: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 51e002e9
...@@ -108,25 +108,12 @@ static int caam_reset_hw_jr(struct device *dev) ...@@ -108,25 +108,12 @@ static int caam_reset_hw_jr(struct device *dev)
static int caam_jr_shutdown(struct device *dev) static int caam_jr_shutdown(struct device *dev)
{ {
struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
dma_addr_t inpbusaddr, outbusaddr;
int ret; int ret;
ret = caam_reset_hw_jr(dev); ret = caam_reset_hw_jr(dev);
tasklet_kill(&jrp->irqtask); 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; return ret;
} }
...@@ -444,8 +431,8 @@ static int caam_jr_init(struct device *dev) ...@@ -444,8 +431,8 @@ static int caam_jr_init(struct device *dev)
tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev); tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev);
/* Connect job ring interrupt handler. */ /* Connect job ring interrupt handler. */
error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED, error = devm_request_irq(dev, jrp->irq, caam_jr_interrupt, IRQF_SHARED,
dev_name(dev), dev); dev_name(dev), dev);
if (error) { if (error) {
dev_err(dev, "can't connect JobR %d interrupt (%d)\n", dev_err(dev, "can't connect JobR %d interrupt (%d)\n",
jrp->ridx, jrp->irq); jrp->ridx, jrp->irq);
...@@ -454,22 +441,25 @@ static int caam_jr_init(struct device *dev) ...@@ -454,22 +441,25 @@ static int caam_jr_init(struct device *dev)
error = caam_reset_hw_jr(dev); error = caam_reset_hw_jr(dev);
if (error) if (error)
goto out_free_irq; goto out_kill_deq;
error = -ENOMEM; error = -ENOMEM;
jrp->inpring = dma_alloc_coherent(dev, sizeof(*jrp->inpring) * jrp->inpring = dmam_alloc_coherent(dev, sizeof(*jrp->inpring) *
JOBR_DEPTH, &inpbusaddr, GFP_KERNEL); JOBR_DEPTH, &inpbusaddr,
GFP_KERNEL);
if (!jrp->inpring) if (!jrp->inpring)
goto out_free_irq; goto out_kill_deq;
jrp->outring = dma_alloc_coherent(dev, sizeof(*jrp->outring) * jrp->outring = dmam_alloc_coherent(dev, sizeof(*jrp->outring) *
JOBR_DEPTH, &outbusaddr, GFP_KERNEL); JOBR_DEPTH, &outbusaddr,
GFP_KERNEL);
if (!jrp->outring) 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) if (!jrp->entinfo)
goto out_free_outring; goto out_kill_deq;
for (i = 0; i < JOBR_DEPTH; i++) for (i = 0; i < JOBR_DEPTH; i++)
jrp->entinfo[i].desc_addr_dma = !0; jrp->entinfo[i].desc_addr_dma = !0;
...@@ -494,16 +484,6 @@ static int caam_jr_init(struct device *dev) ...@@ -494,16 +484,6 @@ static int caam_jr_init(struct device *dev)
(JOBR_INTC_TIME_THLD << JRCFG_ICTT_SHIFT)); (JOBR_INTC_TIME_THLD << JRCFG_ICTT_SHIFT));
return 0; 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: out_kill_deq:
tasklet_kill(&jrp->irqtask); tasklet_kill(&jrp->irqtask);
return error; return error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment