summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTudor Ambarus <tudor.ambarus@freescale.com>2014-03-20 15:12:57 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-03-28 13:40:02 (GMT)
commite713b9a7fe4e7716e7424009deb505cc076845c5 (patch)
treee5c24a306a62245232ec98fac5aacb8e94c01c85
parentffa718c8660ab30a92f1dcf59bc7bf17c4d050cf (diff)
downloadlinux-fsl-qoriq-e713b9a7fe4e7716e7424009deb505cc076845c5.tar.xz
crypto: caam - fix tls1.0 encrypt for large packets
The descriptor tries to push more data into the IFIFO than its size (128 bytes) or existing free space and the DECO hangs. Drain the IFIFO before loading data into it. Signed-off-by: Tudor Ambarus <tudor.ambarus@freescale.com> Change-Id: Ie59760908b821f9c64273d83f4a8cf00e45e08df Reviewed-on: http://git.am.freescale.net:8181/9991 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Cristian Stoica <cristian.stoica@freescale.com> Reviewed-by: Horia Ioan Geanta Neag <horia.geanta@freescale.com> Reviewed-by: Alexandru Porosanu <alexandru.porosanu@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com> (cherry picked from commit 215baf1dc9baf5504cec0e176b390499862e4b09) Reviewed-on: http://git.am.freescale.net:8181/10378 Reviewed-by: Mircea Pop <mircea.pop@freescale.com>
-rw-r--r--drivers/crypto/caam/caamalg.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 152cfb8..a319c3d 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -526,6 +526,9 @@ static int tls_set_sh_desc(struct crypto_aead *aead)
/* cryptlen = payloadlen + icvlen + padlen */
append_math_add(desc, VARSEQOUTLEN, REG1, REG2, 4);
+ /* store encrypted payload, icv and padding */
+ append_seq_fifo_store(desc, 0, FIFOST_TYPE_MESSAGE_DATA | LDST_VLF);
+
/* if payload length is zero, jump to zero-payload commands */
append_math_add(desc, NONE, ZERO, VARSEQINLEN, 4);
zero_payload_jump_cmd = append_jump(desc, JUMP_TEST_ALL |
@@ -563,9 +566,6 @@ static int tls_set_sh_desc(struct crypto_aead *aead)
LDST_SRCDST_WORD_INFO_FIFO_SZM | LDST_IMM |
(2 & LDST_LEN_MASK));
- /* store encrypted payload, icv and padding */
- append_seq_fifo_store(desc, 0, FIFOST_TYPE_MESSAGE_DATA | LDST_VLF);
-
ctx->sh_desc_enc_dma = dma_map_single(jrdev, desc,
desc_bytes(desc),
DMA_TO_DEVICE);