]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
crypto: omap-aes - add IV output handling
authorTero Kristo <t-kristo@ti.com>
Tue, 5 Nov 2019 14:00:54 +0000 (16:00 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 11 Dec 2019 08:36:57 +0000 (16:36 +0800)
Currently omap-aes driver does not copy end result IV out at all. This
is evident with the additional checks done at the crypto test manager.
Fix by copying out the IV values from HW.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/omap-aes.c

index 38c750e83dbe371a44bcbaebeec04fd90f4a4c41..e3f2ed0184f8fbc5d296080f0399c1c3dc96378f 100644 (file)
@@ -479,6 +479,14 @@ static int omap_aes_crypt_req(struct crypto_engine *engine,
        return omap_aes_crypt_dma_start(dd);
 }
 
+static void omap_aes_copy_ivout(struct omap_aes_dev *dd, u8 *ivbuf)
+{
+       int i;
+
+       for (i = 0; i < 4; i++)
+               ((u32 *)ivbuf)[i] = omap_aes_read(dd, AES_REG_IV(dd, i));
+}
+
 static void omap_aes_done_task(unsigned long data)
 {
        struct omap_aes_dev *dd = (struct omap_aes_dev *)data;
@@ -500,6 +508,10 @@ static void omap_aes_done_task(unsigned long data)
        omap_crypto_cleanup(&dd->out_sgl, dd->orig_out, 0, dd->total_save,
                            FLAGS_OUT_DATA_ST_SHIFT, dd->flags);
 
+       /* Update IV output */
+       if (dd->flags & (FLAGS_CBC | FLAGS_CTR))
+               omap_aes_copy_ivout(dd, dd->req->iv);
+
        omap_aes_finish_req(dd, 0);
 
        pr_debug("exit\n");