aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/caam/caamhash.c
diff options
context:
space:
mode:
authorVictoria Milhoan <vicki.milhoan@freescale.com>2015-06-15 19:52:57 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-06-16 02:35:07 -0400
commit8af7b0f809a3d34657433ec545d64dff9808ce34 (patch)
treea35024c4de3b7066fb381b474f4e22ceee885ec7 /drivers/crypto/caam/caamhash.c
parentd37e296979ed1652aec6850e2d736bd0ebf0cdb1 (diff)
crypto: caam - Fix incorrect size when DMA unmapping buffer
The CAAM driver uses two data buffers to store data for a hashing operation, with one buffer defined as active. This change forces switching of the active buffer when executing a hashing operation to avoid a later DMA unmap using the length of the opposite buffer. Signed-off-by: Victoria Milhoan <vicki.milhoan@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/caam/caamhash.c')
-rw-r--r--drivers/crypto/caam/caamhash.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
index ba0532efd3ae..75125a26bd2a 100644
--- a/drivers/crypto/caam/caamhash.c
+++ b/drivers/crypto/caam/caamhash.c
@@ -835,17 +835,17 @@ static int ahash_update_ctx(struct ahash_request *req)
835 src_map_to_sec4_sg(jrdev, req->src, src_nents, 835 src_map_to_sec4_sg(jrdev, req->src, src_nents,
836 edesc->sec4_sg + sec4_sg_src_index, 836 edesc->sec4_sg + sec4_sg_src_index,
837 chained); 837 chained);
838 if (*next_buflen) { 838 if (*next_buflen)
839 scatterwalk_map_and_copy(next_buf, req->src, 839 scatterwalk_map_and_copy(next_buf, req->src,
840 to_hash - *buflen, 840 to_hash - *buflen,
841 *next_buflen, 0); 841 *next_buflen, 0);
842 state->current_buf = !state->current_buf;
843 }
844 } else { 842 } else {
845 (edesc->sec4_sg + sec4_sg_src_index - 1)->len |= 843 (edesc->sec4_sg + sec4_sg_src_index - 1)->len |=
846 SEC4_SG_LEN_FIN; 844 SEC4_SG_LEN_FIN;
847 } 845 }
848 846
847 state->current_buf = !state->current_buf;
848
849 sh_len = desc_len(sh_desc); 849 sh_len = desc_len(sh_desc);
850 desc = edesc->hw_desc; 850 desc = edesc->hw_desc;
851 init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | 851 init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER |
@@ -1268,9 +1268,10 @@ static int ahash_update_no_ctx(struct ahash_request *req)
1268 scatterwalk_map_and_copy(next_buf, req->src, 1268 scatterwalk_map_and_copy(next_buf, req->src,
1269 to_hash - *buflen, 1269 to_hash - *buflen,
1270 *next_buflen, 0); 1270 *next_buflen, 0);
1271 state->current_buf = !state->current_buf;
1272 } 1271 }
1273 1272
1273 state->current_buf = !state->current_buf;
1274
1274 sh_len = desc_len(sh_desc); 1275 sh_len = desc_len(sh_desc);
1275 desc = edesc->hw_desc; 1276 desc = edesc->hw_desc;
1276 init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | 1277 init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER |