crypto: caam - refactor RSA private key _done callbacks
authorIuliana Prodan <iuliana.prodan@nxp.com>
Wed, 12 Feb 2020 17:55:19 +0000 (19:55 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 22 Feb 2020 01:25:47 +0000 (09:25 +0800)
Create a common rsa_priv_f_done function, which based
on private key form calls the specific unmap function.

Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Reviewed-by: Horia Geanta <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/caampkc.c

index 6619c51..ebf1677 100644 (file)
@@ -132,29 +132,13 @@ static void rsa_pub_done(struct device *dev, u32 *desc, u32 err, void *context)
        akcipher_request_complete(req, ecode);
 }
 
-static void rsa_priv_f1_done(struct device *dev, u32 *desc, u32 err,
-                            void *context)
-{
-       struct akcipher_request *req = context;
-       struct rsa_edesc *edesc;
-       int ecode = 0;
-
-       if (err)
-               ecode = caam_jr_strstatus(dev, err);
-
-       edesc = container_of(desc, struct rsa_edesc, hw_desc[0]);
-
-       rsa_priv_f1_unmap(dev, edesc, req);
-       rsa_io_unmap(dev, edesc, req);
-       kfree(edesc);
-
-       akcipher_request_complete(req, ecode);
-}
-
-static void rsa_priv_f2_done(struct device *dev, u32 *desc, u32 err,
-                            void *context)
+static void rsa_priv_f_done(struct device *dev, u32 *desc, u32 err,
+                           void *context)
 {
        struct akcipher_request *req = context;
+       struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_key *key = &ctx->key;
        struct rsa_edesc *edesc;
        int ecode = 0;
 
@@ -163,26 +147,17 @@ static void rsa_priv_f2_done(struct device *dev, u32 *desc, u32 err,
 
        edesc = container_of(desc, struct rsa_edesc, hw_desc[0]);
 
-       rsa_priv_f2_unmap(dev, edesc, req);
-       rsa_io_unmap(dev, edesc, req);
-       kfree(edesc);
-
-       akcipher_request_complete(req, ecode);
-}
-
-static void rsa_priv_f3_done(struct device *dev, u32 *desc, u32 err,
-                            void *context)
-{
-       struct akcipher_request *req = context;
-       struct rsa_edesc *edesc;
-       int ecode = 0;
-
-       if (err)
-               ecode = caam_jr_strstatus(dev, err);
-
-       edesc = container_of(desc, struct rsa_edesc, hw_desc[0]);
+       switch (key->priv_form) {
+       case FORM1:
+               rsa_priv_f1_unmap(dev, edesc, req);
+               break;
+       case FORM2:
+               rsa_priv_f2_unmap(dev, edesc, req);
+               break;
+       case FORM3:
+               rsa_priv_f3_unmap(dev, edesc, req);
+       }
 
-       rsa_priv_f3_unmap(dev, edesc, req);
        rsa_io_unmap(dev, edesc, req);
        kfree(edesc);
 
@@ -691,7 +666,7 @@ static int caam_rsa_dec_priv_f1(struct akcipher_request *req)
        /* Initialize Job Descriptor */
        init_rsa_priv_f1_desc(edesc->hw_desc, &edesc->pdb.priv_f1);
 
-       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f1_done, req);
+       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f_done, req);
        if (!ret)
                return -EINPROGRESS;
 
@@ -724,7 +699,7 @@ static int caam_rsa_dec_priv_f2(struct akcipher_request *req)
        /* Initialize Job Descriptor */
        init_rsa_priv_f2_desc(edesc->hw_desc, &edesc->pdb.priv_f2);
 
-       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f2_done, req);
+       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f_done, req);
        if (!ret)
                return -EINPROGRESS;
 
@@ -757,7 +732,7 @@ static int caam_rsa_dec_priv_f3(struct akcipher_request *req)
        /* Initialize Job Descriptor */
        init_rsa_priv_f3_desc(edesc->hw_desc, &edesc->pdb.priv_f3);
 
-       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f3_done, req);
+       ret = caam_jr_enqueue(jrdev, edesc->hw_desc, rsa_priv_f_done, req);
        if (!ret)
                return -EINPROGRESS;