OSDN Git Service

crypto: caam - use devres to de-initialize QI
authorAndrey Smirnov <andrew.smirnov@gmail.com>
Tue, 22 Oct 2019 15:30:11 +0000 (08:30 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 1 Nov 2019 05:38:30 +0000 (13:38 +0800)
Use devres to de-initialize the QI and drop explicit de-initialization
code in caam_remove().

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Horia Geantă <horia.geanta@nxp.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Iuliana Prodan <iuliana.prodan@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/ctrl.c
drivers/crypto/caam/intern.h
drivers/crypto/caam/qi.c
drivers/crypto/caam/qi.h

index f8c75a9..7cdb48c 100644 (file)
@@ -332,11 +332,6 @@ static int caam_remove(struct platform_device *pdev)
        /* Remove platform devices under the crypto node */
        of_platform_depopulate(ctrldev);
 
-#ifdef CONFIG_CAAM_QI
-       if (ctrlpriv->qi_init)
-               caam_qi_shutdown(ctrldev);
-#endif
-
        return 0;
 }
 
@@ -769,7 +764,7 @@ static int caam_probe(struct platform_device *pdev)
        ret = of_platform_populate(nprop, caam_match, NULL, dev);
        if (ret) {
                dev_err(dev, "JR platform devices creation error\n");
-               goto shutdown_qi;
+               return ret;
        }
 
        ring = 0;
@@ -930,13 +925,6 @@ static int caam_probe(struct platform_device *pdev)
 caam_remove:
        caam_remove(pdev);
        return ret;
-
-shutdown_qi:
-#ifdef CONFIG_CAAM_QI
-       if (ctrlpriv->qi_init)
-               caam_qi_shutdown(dev);
-#endif
-       return ret;
 }
 
 static struct platform_driver caam_driver = {
index 359eb76..c7c10c9 100644 (file)
@@ -81,9 +81,6 @@ struct caam_drv_private {
         */
        u8 total_jobrs;         /* Total Job Rings in device */
        u8 qi_present;          /* Nonzero if QI present in device */
-#ifdef CONFIG_CAAM_QI
-       u8 qi_init;             /* Nonzero if QI has been initialized */
-#endif
        u8 mc_en;               /* Nonzero if MC f/w is active */
        int secvio_irq;         /* Security violation interrupt number */
        int virt_en;            /* Virtualization enabled in CAAM */
index 378f627..dacf2fa 100644 (file)
@@ -500,9 +500,10 @@ void caam_drv_ctx_rel(struct caam_drv_ctx *drv_ctx)
 }
 EXPORT_SYMBOL(caam_drv_ctx_rel);
 
-void caam_qi_shutdown(struct device *qidev)
+static void caam_qi_shutdown(void *data)
 {
        int i;
+       struct device *qidev = data;
        struct caam_qi_priv *priv = &qipriv;
        const cpumask_t *cpus = qman_affine_cpus();
 
@@ -761,7 +762,10 @@ int caam_qi_init(struct platform_device *caam_pdev)
                            &times_congested, &caam_fops_u64_ro);
 #endif
 
-       ctrlpriv->qi_init = 1;
+       err = devm_add_action_or_reset(qidev, caam_qi_shutdown, ctrlpriv);
+       if (err)
+               return err;
+
        dev_info(qidev, "Linux CAAM Queue I/F driver initialised\n");
        return 0;
 }
index db05495..8489589 100644 (file)
@@ -147,7 +147,6 @@ int caam_drv_ctx_update(struct caam_drv_ctx *drv_ctx, u32 *sh_desc);
 void caam_drv_ctx_rel(struct caam_drv_ctx *drv_ctx);
 
 int caam_qi_init(struct platform_device *pdev);
-void caam_qi_shutdown(struct device *dev);
 
 /**
  * qi_cache_alloc - Allocate buffers from CAAM-QI cache