diff options
Diffstat (limited to 'drivers/crypto/mediatek/mtk-aes.c')
-rw-r--r-- | drivers/crypto/mediatek/mtk-aes.c | 14 |
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 | ||