aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/mediatek/mtk-aes.c
diff options
context:
space:
mode:
authorRyder Lee <ryder.lee@mediatek.com>2017-03-08 21:11:15 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2017-03-16 05:58:53 -0400
commit3d21c41f7e9b51c70d37b316f11cf5cce9dd3311 (patch)
tree57a1fccf9f7d5e9399a2c8af74f4b9e743795249 /drivers/crypto/mediatek/mtk-aes.c
parent82445fe995f4b1edf131157a7328796d5aec1efb (diff)
crypto: mediatek - simplify descriptor ring management
This patch replaces cmd_pos/res_pos with pointer cmd_next/res_next. In old code, we must to add one to shift ring to the next segment, and then use this value to caculate current offset from ring base for each DMA operation. Now these pointers helps us to simplify flow, so we just need to move pointers and check the boundaries of ring. Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/mediatek/mtk-aes.c')
-rw-r--r--drivers/crypto/mediatek/mtk-aes.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/crypto/mediatek/mtk-aes.c b/drivers/crypto/mediatek/mtk-aes.c
index b57b68f2ac93..21f3e594804b 100644
--- a/drivers/crypto/mediatek/mtk-aes.c
+++ b/drivers/crypto/mediatek/mtk-aes.c
@@ -262,7 +262,7 @@ static int mtk_aes_xmit(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
262 262
263 /* Write command descriptors */ 263 /* Write command descriptors */
264 for (nents = 0; nents < slen; ++nents, ssg = sg_next(ssg)) { 264 for (nents = 0; nents < slen; ++nents, ssg = sg_next(ssg)) {
265 cmd = ring->cmd_base + ring->cmd_pos; 265 cmd = ring->cmd_next;
266 cmd->hdr = MTK_DESC_BUF_LEN(ssg->length); 266 cmd->hdr = MTK_DESC_BUF_LEN(ssg->length);
267 cmd->buf = cpu_to_le32(sg_dma_address(ssg)); 267 cmd->buf = cpu_to_le32(sg_dma_address(ssg));
268 268
@@ -274,22 +274,24 @@ static int mtk_aes_xmit(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
274 cmd->tfm = cpu_to_le32(aes->ctx->tfm_dma); 274 cmd->tfm = cpu_to_le32(aes->ctx->tfm_dma);
275 } 275 }
276 276
277 if (++ring->cmd_pos == MTK_DESC_NUM) 277 /* Shift ring buffer and check boundary */
278 ring->cmd_pos = 0; 278 if (++ring->cmd_next == ring->cmd_base + MTK_DESC_NUM)
279 ring->cmd_next = ring->cmd_base;
279 } 280 }
280 cmd->hdr |= MTK_DESC_LAST; 281 cmd->hdr |= MTK_DESC_LAST;
281 282
282 /* Prepare result descriptors */ 283 /* Prepare result descriptors */
283 for (nents = 0; nents < dlen; ++nents, dsg = sg_next(dsg)) { 284 for (nents = 0; nents < dlen; ++nents, dsg = sg_next(dsg)) {
284 res = ring->res_base + ring->res_pos; 285 res = ring->res_next;
285 res->hdr = MTK_DESC_BUF_LEN(dsg->length); 286 res->hdr = MTK_DESC_BUF_LEN(dsg->length);
286 res->buf = cpu_to_le32(sg_dma_address(dsg)); 287 res->buf = cpu_to_le32(sg_dma_address(dsg));
287 288
288 if (nents == 0) 289 if (nents == 0)
289 res->hdr |= MTK_DESC_FIRST; 290 res->hdr |= MTK_DESC_FIRST;
290 291
291 if (++ring->res_pos == MTK_DESC_NUM) 292 /* Shift ring buffer and check boundary */
292 ring->res_pos = 0; 293 if (++ring->res_next == ring->res_base + MTK_DESC_NUM)
294 ring->res_next = ring->res_base;
293 } 295 }
294 res->hdr |= MTK_DESC_LAST; 296 res->hdr |= MTK_DESC_LAST;
295 297