crypto: caam - convert caam_jr_init() to use devres
authorAndrey Smirnov <andrew.smirnov@gmail.com>
Tue, 20 Aug 2019 20:23:49 +0000 (13:23 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 30 Aug 2019 08:05:29 +0000 (18:05 +1000)
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>
drivers/crypto/caam/jr.c

index 4b25b2fa3d02f8c455d72b032f465b3c00a95f75..ea02f7774f7c1b8febb91990b2f6df2966a83d4f 100644 (file)
@@ -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;