Lines Matching refs:cryp

107 	struct mtk_cryp *cryp;
153 static inline u32 mtk_aes_read(struct mtk_cryp *cryp, u32 offset)
155 return readl_relaxed(cryp->base + offset);
158 static inline void mtk_aes_write(struct mtk_cryp *cryp,
161 writel_relaxed(value, cryp->base + offset);
166 struct mtk_cryp *cryp = NULL;
170 if (!ctx->cryp) {
172 cryp = tmp;
175 ctx->cryp = cryp;
177 cryp = ctx->cryp;
181 return cryp;
245 static inline int mtk_aes_complete(struct mtk_cryp *cryp,
260 static int mtk_aes_xmit(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
262 struct mtk_ring *ring = cryp->ring[aes->id];
316 mtk_aes_write(cryp, RDR_PREP_COUNT(aes->id), MTK_DESC_CNT(dlen));
317 mtk_aes_write(cryp, CDR_PREP_COUNT(aes->id), MTK_DESC_CNT(slen));
322 static void mtk_aes_unmap(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
326 dma_unmap_single(cryp->dev, ctx->ct_dma, sizeof(ctx->info),
330 dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents,
336 dma_unmap_sg(cryp->dev, aes->dst.sg, aes->dst.nents,
342 dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents,
354 static int mtk_aes_map(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
359 ctx->ct_dma = dma_map_single(cryp->dev, info, sizeof(*info),
361 if (unlikely(dma_mapping_error(cryp->dev, ctx->ct_dma)))
367 aes->src.sg_len = dma_map_sg(cryp->dev, aes->src.sg,
374 aes->src.sg_len = dma_map_sg(cryp->dev, aes->src.sg,
379 aes->dst.sg_len = dma_map_sg(cryp->dev, aes->dst.sg,
382 dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents,
388 return mtk_aes_xmit(cryp, aes);
391 dma_unmap_single(cryp->dev, ctx->ct_dma, sizeof(*info), DMA_TO_DEVICE);
393 return mtk_aes_complete(cryp, aes, -EINVAL);
397 static void mtk_aes_info_init(struct mtk_cryp *cryp, struct mtk_aes_rec *aes,
446 static int mtk_aes_dma(struct mtk_cryp *cryp, struct mtk_aes_rec *aes,
468 return mtk_aes_complete(cryp, aes, -ENOMEM);
487 mtk_aes_info_init(cryp, aes, len + padlen);
489 return mtk_aes_map(cryp, aes);
492 static int mtk_aes_handle_queue(struct mtk_cryp *cryp, u8 id,
495 struct mtk_aes_rec *aes = cryp->aes[id];
527 return ctx->start(cryp, aes);
530 static int mtk_aes_transfer_complete(struct mtk_cryp *cryp,
533 return mtk_aes_complete(cryp, aes, 0);
536 static int mtk_aes_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
544 return mtk_aes_dma(cryp, aes, req->src, req->dst, req->cryptlen);
553 static int mtk_aes_ctr_transfer(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
566 return mtk_aes_transfer_complete(cryp, aes);
599 return mtk_aes_dma(cryp, aes, src, dst, datalen);
602 static int mtk_aes_ctr_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
615 return mtk_aes_ctr_transfer(cryp, aes);
650 struct mtk_cryp *cryp;
652 cryp = mtk_aes_find_dev(ctx);
653 if (!cryp)
659 return mtk_aes_handle_queue(cryp, !(mode & AES_FLAGS_ENCRYPT),
831 static int mtk_aes_gcm_tag_verify(struct mtk_cryp *cryp,
834 __le32 status = cryp->ring[aes->id]->res_prev->ct;
836 return mtk_aes_complete(cryp, aes, (status & AES_AUTH_TAG_ERR) ?
841 static void mtk_aes_gcm_info_init(struct mtk_cryp *cryp,
879 static int mtk_aes_gcm_dma(struct mtk_cryp *cryp, struct mtk_aes_rec *aes,
897 return mtk_aes_complete(cryp, aes, -ENOMEM);
916 mtk_aes_gcm_info_init(cryp, aes, len);
918 return mtk_aes_map(cryp, aes);
922 static int mtk_aes_gcm_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes)
944 return mtk_aes_gcm_dma(cryp, aes, req->src, req->dst, len);
952 struct mtk_cryp *cryp;
955 cryp = mtk_aes_find_dev(ctx);
956 if (!cryp)
968 return mtk_aes_handle_queue(cryp, enc, &req->base);
1087 mtk_aes_handle_queue(aes->cryp, aes->id, NULL);
1093 struct mtk_cryp *cryp = aes->cryp;
1095 mtk_aes_unmap(cryp, aes);
1096 aes->resume(cryp, aes);
1102 struct mtk_cryp *cryp = aes->cryp;
1103 u32 val = mtk_aes_read(cryp, RDR_STAT(aes->id));
1105 mtk_aes_write(cryp, RDR_STAT(aes->id), val);
1108 mtk_aes_write(cryp, RDR_PROC_COUNT(aes->id), MTK_CNT_RST);
1109 mtk_aes_write(cryp, RDR_THRESH(aes->id),
1114 dev_warn(cryp->dev, "AES interrupt when no active requests.\n");
1125 static int mtk_aes_record_init(struct mtk_cryp *cryp)
1127 struct mtk_aes_rec **aes = cryp->aes;
1140 aes[i]->cryp = cryp;
1166 static void mtk_aes_record_free(struct mtk_cryp *cryp)
1171 tasklet_kill(&cryp->aes[i]->done_task);
1172 tasklet_kill(&cryp->aes[i]->queue_task);
1174 free_page((unsigned long)cryp->aes[i]->buf);
1175 kfree(cryp->aes[i]);
1212 int mtk_cipher_alg_register(struct mtk_cryp *cryp)
1216 INIT_LIST_HEAD(&cryp->aes_list);
1219 ret = mtk_aes_record_init(cryp);
1223 ret = devm_request_irq(cryp->dev, cryp->irq[MTK_RING0], mtk_aes_irq,
1224 0, "mtk-aes", cryp->aes[0]);
1226 dev_err(cryp->dev, "unable to request AES irq.\n");
1230 ret = devm_request_irq(cryp->dev, cryp->irq[MTK_RING1], mtk_aes_irq,
1231 0, "mtk-aes", cryp->aes[1]);
1233 dev_err(cryp->dev, "unable to request AES irq.\n");
1238 mtk_aes_write(cryp, AIC_ENABLE_SET(MTK_RING0), MTK_IRQ_RDR0);
1239 mtk_aes_write(cryp, AIC_ENABLE_SET(MTK_RING1), MTK_IRQ_RDR1);
1242 list_add_tail(&cryp->aes_list, &mtk_aes.dev_list);
1253 list_del(&cryp->aes_list);
1256 mtk_aes_record_free(cryp);
1259 dev_err(cryp->dev, "mtk-aes initialization failed.\n");
1263 void mtk_cipher_alg_release(struct mtk_cryp *cryp)
1266 list_del(&cryp->aes_list);
1270 mtk_aes_record_free(cryp);