cryp 106 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp; cryp 154 drivers/crypto/mediatek/mtk-aes.c static inline u32 mtk_aes_read(struct mtk_cryp *cryp, u32 offset) cryp 156 drivers/crypto/mediatek/mtk-aes.c return readl_relaxed(cryp->base + offset); cryp 159 drivers/crypto/mediatek/mtk-aes.c static inline void mtk_aes_write(struct mtk_cryp *cryp, cryp 162 drivers/crypto/mediatek/mtk-aes.c writel_relaxed(value, cryp->base + offset); cryp 167 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp = NULL; cryp 171 drivers/crypto/mediatek/mtk-aes.c if (!ctx->cryp) { cryp 173 drivers/crypto/mediatek/mtk-aes.c cryp = tmp; cryp 176 drivers/crypto/mediatek/mtk-aes.c ctx->cryp = cryp; cryp 178 drivers/crypto/mediatek/mtk-aes.c cryp = ctx->cryp; cryp 182 drivers/crypto/mediatek/mtk-aes.c return cryp; cryp 262 drivers/crypto/mediatek/mtk-aes.c static inline int mtk_aes_complete(struct mtk_cryp *cryp, cryp 277 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_xmit(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 279 drivers/crypto/mediatek/mtk-aes.c struct mtk_ring *ring = cryp->ring[aes->id]; cryp 333 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, RDR_PREP_COUNT(aes->id), MTK_DESC_CNT(dlen)); cryp 334 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, CDR_PREP_COUNT(aes->id), MTK_DESC_CNT(slen)); cryp 339 drivers/crypto/mediatek/mtk-aes.c static void mtk_aes_unmap(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 343 drivers/crypto/mediatek/mtk-aes.c dma_unmap_single(cryp->dev, ctx->ct_dma, sizeof(ctx->info), cryp 347 drivers/crypto/mediatek/mtk-aes.c dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents, cryp 353 drivers/crypto/mediatek/mtk-aes.c dma_unmap_sg(cryp->dev, aes->dst.sg, aes->dst.nents, cryp 359 drivers/crypto/mediatek/mtk-aes.c dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents, cryp 371 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_map(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 376 drivers/crypto/mediatek/mtk-aes.c ctx->ct_dma = dma_map_single(cryp->dev, info, sizeof(*info), cryp 378 drivers/crypto/mediatek/mtk-aes.c if (unlikely(dma_mapping_error(cryp->dev, ctx->ct_dma))) cryp 384 drivers/crypto/mediatek/mtk-aes.c aes->src.sg_len = dma_map_sg(cryp->dev, aes->src.sg, cryp 391 drivers/crypto/mediatek/mtk-aes.c aes->src.sg_len = dma_map_sg(cryp->dev, aes->src.sg, cryp 396 drivers/crypto/mediatek/mtk-aes.c aes->dst.sg_len = dma_map_sg(cryp->dev, aes->dst.sg, cryp 399 drivers/crypto/mediatek/mtk-aes.c dma_unmap_sg(cryp->dev, aes->src.sg, aes->src.nents, cryp 405 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_xmit(cryp, aes); cryp 408 drivers/crypto/mediatek/mtk-aes.c dma_unmap_single(cryp->dev, ctx->ct_dma, sizeof(*info), DMA_TO_DEVICE); cryp 410 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_complete(cryp, aes, -EINVAL); cryp 414 drivers/crypto/mediatek/mtk-aes.c static void mtk_aes_info_init(struct mtk_cryp *cryp, struct mtk_aes_rec *aes, cryp 463 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_dma(struct mtk_cryp *cryp, struct mtk_aes_rec *aes, cryp 485 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_complete(cryp, aes, -ENOMEM); cryp 504 drivers/crypto/mediatek/mtk-aes.c mtk_aes_info_init(cryp, aes, len + padlen); cryp 506 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_map(cryp, aes); cryp 509 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_handle_queue(struct mtk_cryp *cryp, u8 id, cryp 512 drivers/crypto/mediatek/mtk-aes.c struct mtk_aes_rec *aes = cryp->aes[id]; cryp 544 drivers/crypto/mediatek/mtk-aes.c return ctx->start(cryp, aes); cryp 547 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_transfer_complete(struct mtk_cryp *cryp, cryp 550 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_complete(cryp, aes, 0); cryp 553 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 561 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_dma(cryp, aes, req->src, req->dst, req->nbytes); cryp 570 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_ctr_transfer(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 583 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_transfer_complete(cryp, aes); cryp 617 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_dma(cryp, aes, src, dst, datalen); cryp 620 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_ctr_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 633 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_ctr_transfer(cryp, aes); cryp 669 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp; cryp 671 drivers/crypto/mediatek/mtk-aes.c cryp = mtk_aes_find_dev(ctx); cryp 672 drivers/crypto/mediatek/mtk-aes.c if (!cryp) cryp 678 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_handle_queue(cryp, !(mode & AES_FLAGS_ENCRYPT), cryp 867 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_gcm_tag_verify(struct mtk_cryp *cryp, cryp 870 drivers/crypto/mediatek/mtk-aes.c u32 status = cryp->ring[aes->id]->res_prev->ct; cryp 872 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_complete(cryp, aes, (status & AES_AUTH_TAG_ERR) ? cryp 877 drivers/crypto/mediatek/mtk-aes.c static void mtk_aes_gcm_info_init(struct mtk_cryp *cryp, cryp 915 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_gcm_dma(struct mtk_cryp *cryp, struct mtk_aes_rec *aes, cryp 933 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_complete(cryp, aes, -ENOMEM); cryp 952 drivers/crypto/mediatek/mtk-aes.c mtk_aes_gcm_info_init(cryp, aes, len); cryp 954 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_map(cryp, aes); cryp 958 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_gcm_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) cryp 980 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_gcm_dma(cryp, aes, req->src, req->dst, len); cryp 988 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp; cryp 991 drivers/crypto/mediatek/mtk-aes.c cryp = mtk_aes_find_dev(ctx); cryp 992 drivers/crypto/mediatek/mtk-aes.c if (!cryp) cryp 1004 drivers/crypto/mediatek/mtk-aes.c return mtk_aes_handle_queue(cryp, enc, &req->base); cryp 1163 drivers/crypto/mediatek/mtk-aes.c mtk_aes_handle_queue(aes->cryp, aes->id, NULL); cryp 1169 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp = aes->cryp; cryp 1171 drivers/crypto/mediatek/mtk-aes.c mtk_aes_unmap(cryp, aes); cryp 1172 drivers/crypto/mediatek/mtk-aes.c aes->resume(cryp, aes); cryp 1178 drivers/crypto/mediatek/mtk-aes.c struct mtk_cryp *cryp = aes->cryp; cryp 1179 drivers/crypto/mediatek/mtk-aes.c u32 val = mtk_aes_read(cryp, RDR_STAT(aes->id)); cryp 1181 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, RDR_STAT(aes->id), val); cryp 1184 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, RDR_PROC_COUNT(aes->id), MTK_CNT_RST); cryp 1185 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, RDR_THRESH(aes->id), cryp 1190 drivers/crypto/mediatek/mtk-aes.c dev_warn(cryp->dev, "AES interrupt when no active requests.\n"); cryp 1201 drivers/crypto/mediatek/mtk-aes.c static int mtk_aes_record_init(struct mtk_cryp *cryp) cryp 1203 drivers/crypto/mediatek/mtk-aes.c struct mtk_aes_rec **aes = cryp->aes; cryp 1216 drivers/crypto/mediatek/mtk-aes.c aes[i]->cryp = cryp; cryp 1242 drivers/crypto/mediatek/mtk-aes.c static void mtk_aes_record_free(struct mtk_cryp *cryp) cryp 1247 drivers/crypto/mediatek/mtk-aes.c tasklet_kill(&cryp->aes[i]->done_task); cryp 1248 drivers/crypto/mediatek/mtk-aes.c tasklet_kill(&cryp->aes[i]->queue_task); cryp 1250 drivers/crypto/mediatek/mtk-aes.c free_page((unsigned long)cryp->aes[i]->buf); cryp 1251 drivers/crypto/mediatek/mtk-aes.c kfree(cryp->aes[i]); cryp 1288 drivers/crypto/mediatek/mtk-aes.c int mtk_cipher_alg_register(struct mtk_cryp *cryp) cryp 1292 drivers/crypto/mediatek/mtk-aes.c INIT_LIST_HEAD(&cryp->aes_list); cryp 1295 drivers/crypto/mediatek/mtk-aes.c ret = mtk_aes_record_init(cryp); cryp 1299 drivers/crypto/mediatek/mtk-aes.c ret = devm_request_irq(cryp->dev, cryp->irq[MTK_RING0], mtk_aes_irq, cryp 1300 drivers/crypto/mediatek/mtk-aes.c 0, "mtk-aes", cryp->aes[0]); cryp 1302 drivers/crypto/mediatek/mtk-aes.c dev_err(cryp->dev, "unable to request AES irq.\n"); cryp 1306 drivers/crypto/mediatek/mtk-aes.c ret = devm_request_irq(cryp->dev, cryp->irq[MTK_RING1], mtk_aes_irq, cryp 1307 drivers/crypto/mediatek/mtk-aes.c 0, "mtk-aes", cryp->aes[1]); cryp 1309 drivers/crypto/mediatek/mtk-aes.c dev_err(cryp->dev, "unable to request AES irq.\n"); cryp 1314 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, AIC_ENABLE_SET(MTK_RING0), MTK_IRQ_RDR0); cryp 1315 drivers/crypto/mediatek/mtk-aes.c mtk_aes_write(cryp, AIC_ENABLE_SET(MTK_RING1), MTK_IRQ_RDR1); cryp 1318 drivers/crypto/mediatek/mtk-aes.c list_add_tail(&cryp->aes_list, &mtk_aes.dev_list); cryp 1329 drivers/crypto/mediatek/mtk-aes.c list_del(&cryp->aes_list); cryp 1332 drivers/crypto/mediatek/mtk-aes.c mtk_aes_record_free(cryp); cryp 1335 drivers/crypto/mediatek/mtk-aes.c dev_err(cryp->dev, "mtk-aes initialization failed.\n"); cryp 1339 drivers/crypto/mediatek/mtk-aes.c void mtk_cipher_alg_release(struct mtk_cryp *cryp) cryp 1342 drivers/crypto/mediatek/mtk-aes.c list_del(&cryp->aes_list); cryp 1346 drivers/crypto/mediatek/mtk-aes.c mtk_aes_record_free(cryp); cryp 120 drivers/crypto/mediatek/mtk-platform.c static void mtk_desc_ring_link(struct mtk_cryp *cryp, u32 mask) cryp 123 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DFSE_THR_CTRL_EN | mask, cryp->base + DFE_THR_CTRL); cryp 124 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DFSE_THR_CTRL_EN | mask, cryp->base + DSE_THR_CTRL); cryp 127 drivers/crypto/mediatek/mtk-platform.c static void mtk_dfe_dse_buf_setup(struct mtk_cryp *cryp, cryp 140 drivers/crypto/mediatek/mtk-platform.c cryp->base + DFE_CFG); cryp 144 drivers/crypto/mediatek/mtk-platform.c cryp->base + DSE_CFG); cryp 148 drivers/crypto/mediatek/mtk-platform.c cryp->base + PE_IN_DBUF_THRESH); cryp 152 drivers/crypto/mediatek/mtk-platform.c cryp->base + PE_IN_TBUF_THRESH); cryp 156 drivers/crypto/mediatek/mtk-platform.c cryp->base + PE_OUT_DBUF_THRESH); cryp 158 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + PE_OUT_TBUF_THRESH); cryp 159 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + PE_OUT_BUF_CTRL); cryp 162 drivers/crypto/mediatek/mtk-platform.c static int mtk_dfe_dse_state_check(struct mtk_cryp *cryp) cryp 168 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + DFE_THR_STAT); cryp 170 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + DSE_THR_STAT); cryp 177 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DFE_THR_CTRL); cryp 178 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DSE_THR_CTRL); cryp 186 drivers/crypto/mediatek/mtk-platform.c static int mtk_dfe_dse_reset(struct mtk_cryp *cryp) cryp 191 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DFSE_THR_CTRL_RESET, cryp->base + DFE_THR_CTRL); cryp 192 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DFE_PRIO_0); cryp 193 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DFE_PRIO_1); cryp 194 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DFE_PRIO_2); cryp 195 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DFE_PRIO_3); cryp 197 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DFSE_THR_CTRL_RESET, cryp->base + DSE_THR_CTRL); cryp 198 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DSE_PRIO_0); cryp 199 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DSE_PRIO_1); cryp 200 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DSE_PRIO_2); cryp 201 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + DSE_PRIO_3); cryp 203 drivers/crypto/mediatek/mtk-platform.c err = mtk_dfe_dse_state_check(cryp); cryp 210 drivers/crypto/mediatek/mtk-platform.c static void mtk_cmd_desc_ring_setup(struct mtk_cryp *cryp, cryp 218 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + CDR_CFG(i)); cryp 221 drivers/crypto/mediatek/mtk-platform.c writel(MTK_CNT_RST, cryp->base + CDR_PREP_COUNT(i)); cryp 222 drivers/crypto/mediatek/mtk-platform.c writel(MTK_CNT_RST, cryp->base + CDR_PROC_COUNT(i)); cryp 224 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + CDR_PREP_PNTR(i)); cryp 225 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + CDR_PROC_PNTR(i)); cryp 226 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + CDR_DMA_CFG(i)); cryp 229 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + CDR_BASE_ADDR_HI(i)); cryp 230 drivers/crypto/mediatek/mtk-platform.c writel(cryp->ring[i]->cmd_dma, cryp->base + CDR_BASE_ADDR_LO(i)); cryp 232 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DESC_RING_SZ, cryp->base + CDR_RING_SIZE(i)); cryp 235 drivers/crypto/mediatek/mtk-platform.c writel(MTK_CDR_STAT_CLR, cryp->base + CDR_STAT(i)); cryp 244 drivers/crypto/mediatek/mtk-platform.c cryp->base + CDR_DESC_SIZE(i)); cryp 248 drivers/crypto/mediatek/mtk-platform.c cryp->base + CDR_CFG(i)); cryp 251 drivers/crypto/mediatek/mtk-platform.c static void mtk_res_desc_ring_setup(struct mtk_cryp *cryp, cryp 258 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + RDR_CFG(i)); cryp 261 drivers/crypto/mediatek/mtk-platform.c writel(MTK_CNT_RST, cryp->base + RDR_PREP_COUNT(i)); cryp 262 drivers/crypto/mediatek/mtk-platform.c writel(MTK_CNT_RST, cryp->base + RDR_PROC_COUNT(i)); cryp 264 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + RDR_PREP_PNTR(i)); cryp 265 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + RDR_PROC_PNTR(i)); cryp 266 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + RDR_DMA_CFG(i)); cryp 269 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + RDR_BASE_ADDR_HI(i)); cryp 270 drivers/crypto/mediatek/mtk-platform.c writel(cryp->ring[i]->res_dma, cryp->base + RDR_BASE_ADDR_LO(i)); cryp 272 drivers/crypto/mediatek/mtk-platform.c writel(MTK_DESC_RING_SZ, cryp->base + RDR_RING_SIZE(i)); cryp 273 drivers/crypto/mediatek/mtk-platform.c writel(MTK_RDR_STAT_CLR, cryp->base + RDR_STAT(i)); cryp 281 drivers/crypto/mediatek/mtk-platform.c cryp->base + RDR_THRESH(i)); cryp 289 drivers/crypto/mediatek/mtk-platform.c cryp->base + RDR_DESC_SIZE(i)); cryp 298 drivers/crypto/mediatek/mtk-platform.c cryp->base + RDR_CFG(i)); cryp 301 drivers/crypto/mediatek/mtk-platform.c static int mtk_packet_engine_setup(struct mtk_cryp *cryp) cryp 307 drivers/crypto/mediatek/mtk-platform.c cap.hia_ver = readl(cryp->base + HIA_VERSION); cryp 308 drivers/crypto/mediatek/mtk-platform.c cap.hia_opt = readl(cryp->base + HIA_OPTIONS); cryp 309 drivers/crypto/mediatek/mtk-platform.c cap.hw_opt = readl(cryp->base + EIP97_OPTIONS); cryp 315 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + EIP97_MST_CTRL); cryp 318 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + HIA_MST_CTRL); cryp 321 drivers/crypto/mediatek/mtk-platform.c writel(val, cryp->base + HIA_MST_CTRL); cryp 323 drivers/crypto/mediatek/mtk-platform.c err = mtk_dfe_dse_reset(cryp); cryp 325 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Failed to reset DFE and DSE.\n"); cryp 329 drivers/crypto/mediatek/mtk-platform.c mtk_dfe_dse_buf_setup(cryp, &cap); cryp 332 drivers/crypto/mediatek/mtk-platform.c mtk_desc_ring_link(cryp, 0xf); cryp 335 drivers/crypto/mediatek/mtk-platform.c mtk_cmd_desc_ring_setup(cryp, i, &cap); cryp 336 drivers/crypto/mediatek/mtk-platform.c mtk_res_desc_ring_setup(cryp, i, &cap); cryp 340 drivers/crypto/mediatek/mtk-platform.c cryp->base + PE_TOKEN_CTRL_STAT); cryp 343 drivers/crypto/mediatek/mtk-platform.c writel(MTK_AIC_G_CLR, cryp->base + AIC_G_ACK); cryp 350 drivers/crypto/mediatek/mtk-platform.c cryp->base + PE_INTERRUPT_CTRL_STAT); cryp 355 drivers/crypto/mediatek/mtk-platform.c static int mtk_aic_cap_check(struct mtk_cryp *cryp, int hw) cryp 360 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + AIC_G_VERSION); cryp 362 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + AIC_VERSION(hw)); cryp 369 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + AIC_G_OPTIONS); cryp 371 drivers/crypto/mediatek/mtk-platform.c val = readl(cryp->base + AIC_OPTIONS(hw)); cryp 380 drivers/crypto/mediatek/mtk-platform.c static int mtk_aic_init(struct mtk_cryp *cryp, int hw) cryp 384 drivers/crypto/mediatek/mtk-platform.c err = mtk_aic_cap_check(cryp, hw); cryp 390 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_G_ENABLE_CTRL); cryp 391 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_G_POL_CTRL); cryp 392 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_G_TYPE_CTRL); cryp 393 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_G_ENABLE_SET); cryp 395 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_ENABLE_CTRL(hw)); cryp 396 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_POL_CTRL(hw)); cryp 397 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_TYPE_CTRL(hw)); cryp 398 drivers/crypto/mediatek/mtk-platform.c writel(0, cryp->base + AIC_ENABLE_SET(hw)); cryp 404 drivers/crypto/mediatek/mtk-platform.c static int mtk_accelerator_init(struct mtk_cryp *cryp) cryp 410 drivers/crypto/mediatek/mtk-platform.c err = mtk_aic_init(cryp, i); cryp 412 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Failed to initialize AIC.\n"); cryp 418 drivers/crypto/mediatek/mtk-platform.c err = mtk_packet_engine_setup(cryp); cryp 420 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Failed to configure packet engine.\n"); cryp 427 drivers/crypto/mediatek/mtk-platform.c static void mtk_desc_dma_free(struct mtk_cryp *cryp) cryp 432 drivers/crypto/mediatek/mtk-platform.c dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ, cryp 433 drivers/crypto/mediatek/mtk-platform.c cryp->ring[i]->res_base, cryp 434 drivers/crypto/mediatek/mtk-platform.c cryp->ring[i]->res_dma); cryp 435 drivers/crypto/mediatek/mtk-platform.c dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ, cryp 436 drivers/crypto/mediatek/mtk-platform.c cryp->ring[i]->cmd_base, cryp 437 drivers/crypto/mediatek/mtk-platform.c cryp->ring[i]->cmd_dma); cryp 438 drivers/crypto/mediatek/mtk-platform.c kfree(cryp->ring[i]); cryp 442 drivers/crypto/mediatek/mtk-platform.c static int mtk_desc_ring_alloc(struct mtk_cryp *cryp) cryp 444 drivers/crypto/mediatek/mtk-platform.c struct mtk_ring **ring = cryp->ring; cryp 452 drivers/crypto/mediatek/mtk-platform.c ring[i]->cmd_base = dma_alloc_coherent(cryp->dev, cryp 459 drivers/crypto/mediatek/mtk-platform.c ring[i]->res_base = dma_alloc_coherent(cryp->dev, cryp 473 drivers/crypto/mediatek/mtk-platform.c dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ, cryp 475 drivers/crypto/mediatek/mtk-platform.c dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ, cryp 484 drivers/crypto/mediatek/mtk-platform.c struct mtk_cryp *cryp; cryp 487 drivers/crypto/mediatek/mtk-platform.c cryp = devm_kzalloc(&pdev->dev, sizeof(*cryp), GFP_KERNEL); cryp 488 drivers/crypto/mediatek/mtk-platform.c if (!cryp) cryp 491 drivers/crypto/mediatek/mtk-platform.c cryp->base = devm_platform_ioremap_resource(pdev, 0); cryp 492 drivers/crypto/mediatek/mtk-platform.c if (IS_ERR(cryp->base)) cryp 493 drivers/crypto/mediatek/mtk-platform.c return PTR_ERR(cryp->base); cryp 496 drivers/crypto/mediatek/mtk-platform.c cryp->irq[i] = platform_get_irq(pdev, i); cryp 497 drivers/crypto/mediatek/mtk-platform.c if (cryp->irq[i] < 0) cryp 498 drivers/crypto/mediatek/mtk-platform.c return cryp->irq[i]; cryp 501 drivers/crypto/mediatek/mtk-platform.c cryp->clk_cryp = devm_clk_get(&pdev->dev, "cryp"); cryp 502 drivers/crypto/mediatek/mtk-platform.c if (IS_ERR(cryp->clk_cryp)) cryp 505 drivers/crypto/mediatek/mtk-platform.c cryp->dev = &pdev->dev; cryp 506 drivers/crypto/mediatek/mtk-platform.c pm_runtime_enable(cryp->dev); cryp 507 drivers/crypto/mediatek/mtk-platform.c pm_runtime_get_sync(cryp->dev); cryp 509 drivers/crypto/mediatek/mtk-platform.c err = clk_prepare_enable(cryp->clk_cryp); cryp 514 drivers/crypto/mediatek/mtk-platform.c err = mtk_desc_ring_alloc(cryp); cryp 516 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Unable to allocate descriptor rings.\n"); cryp 521 drivers/crypto/mediatek/mtk-platform.c err = mtk_accelerator_init(cryp); cryp 523 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Failed to initialize cryptographic engine.\n"); cryp 527 drivers/crypto/mediatek/mtk-platform.c err = mtk_cipher_alg_register(cryp); cryp 529 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Unable to register cipher algorithm.\n"); cryp 533 drivers/crypto/mediatek/mtk-platform.c err = mtk_hash_alg_register(cryp); cryp 535 drivers/crypto/mediatek/mtk-platform.c dev_err(cryp->dev, "Unable to register hash algorithm.\n"); cryp 539 drivers/crypto/mediatek/mtk-platform.c platform_set_drvdata(pdev, cryp); cryp 543 drivers/crypto/mediatek/mtk-platform.c mtk_cipher_alg_release(cryp); cryp 545 drivers/crypto/mediatek/mtk-platform.c mtk_dfe_dse_reset(cryp); cryp 547 drivers/crypto/mediatek/mtk-platform.c mtk_desc_dma_free(cryp); cryp 549 drivers/crypto/mediatek/mtk-platform.c clk_disable_unprepare(cryp->clk_cryp); cryp 551 drivers/crypto/mediatek/mtk-platform.c pm_runtime_put_sync(cryp->dev); cryp 552 drivers/crypto/mediatek/mtk-platform.c pm_runtime_disable(cryp->dev); cryp 559 drivers/crypto/mediatek/mtk-platform.c struct mtk_cryp *cryp = platform_get_drvdata(pdev); cryp 561 drivers/crypto/mediatek/mtk-platform.c mtk_hash_alg_release(cryp); cryp 562 drivers/crypto/mediatek/mtk-platform.c mtk_cipher_alg_release(cryp); cryp 563 drivers/crypto/mediatek/mtk-platform.c mtk_desc_dma_free(cryp); cryp 565 drivers/crypto/mediatek/mtk-platform.c clk_disable_unprepare(cryp->clk_cryp); cryp 567 drivers/crypto/mediatek/mtk-platform.c pm_runtime_put_sync(cryp->dev); cryp 568 drivers/crypto/mediatek/mtk-platform.c pm_runtime_disable(cryp->dev); cryp 122 drivers/crypto/mediatek/mtk-platform.h typedef int (*mtk_aes_fn)(struct mtk_cryp *cryp, struct mtk_aes_rec *aes); cryp 146 drivers/crypto/mediatek/mtk-platform.h struct mtk_cryp *cryp; cryp 183 drivers/crypto/mediatek/mtk-platform.h struct mtk_cryp *cryp; cryp 226 drivers/crypto/mediatek/mtk-platform.h int mtk_cipher_alg_register(struct mtk_cryp *cryp); cryp 227 drivers/crypto/mediatek/mtk-platform.h void mtk_cipher_alg_release(struct mtk_cryp *cryp); cryp 228 drivers/crypto/mediatek/mtk-platform.h int mtk_hash_alg_register(struct mtk_cryp *cryp); cryp 229 drivers/crypto/mediatek/mtk-platform.h void mtk_hash_alg_release(struct mtk_cryp *cryp); cryp 105 drivers/crypto/mediatek/mtk-sha.c struct mtk_cryp *cryp; cryp 124 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_handle_queue(struct mtk_cryp *cryp, u8 id, cryp 127 drivers/crypto/mediatek/mtk-sha.c static inline u32 mtk_sha_read(struct mtk_cryp *cryp, u32 offset) cryp 129 drivers/crypto/mediatek/mtk-sha.c return readl_relaxed(cryp->base + offset); cryp 132 drivers/crypto/mediatek/mtk-sha.c static inline void mtk_sha_write(struct mtk_cryp *cryp, cryp 135 drivers/crypto/mediatek/mtk-sha.c writel_relaxed(value, cryp->base + offset); cryp 155 drivers/crypto/mediatek/mtk-sha.c struct mtk_cryp *cryp = NULL; cryp 159 drivers/crypto/mediatek/mtk-sha.c if (!tctx->cryp) { cryp 161 drivers/crypto/mediatek/mtk-sha.c cryp = tmp; cryp 164 drivers/crypto/mediatek/mtk-sha.c tctx->cryp = cryp; cryp 166 drivers/crypto/mediatek/mtk-sha.c cryp = tctx->cryp; cryp 173 drivers/crypto/mediatek/mtk-sha.c tctx->id = cryp->rec; cryp 174 drivers/crypto/mediatek/mtk-sha.c cryp->rec = !cryp->rec; cryp 178 drivers/crypto/mediatek/mtk-sha.c return cryp; cryp 320 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_info_update(struct mtk_cryp *cryp, cryp 338 drivers/crypto/mediatek/mtk-sha.c ctx->ct_dma = dma_map_single(cryp->dev, info, sizeof(*info), cryp 340 drivers/crypto/mediatek/mtk-sha.c if (unlikely(dma_mapping_error(cryp->dev, ctx->ct_dma))) { cryp 341 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "dma %zu bytes error\n", sizeof(*info)); cryp 421 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_xmit(struct mtk_cryp *cryp, struct mtk_sha_rec *sha, cryp 426 drivers/crypto/mediatek/mtk-sha.c struct mtk_ring *ring = cryp->ring[sha->id]; cryp 430 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_info_update(cryp, sha, len1, len2); cryp 462 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, RDR_PREP_COUNT(sha->id), MTK_DESC_CNT(count)); cryp 463 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, CDR_PREP_COUNT(sha->id), MTK_DESC_CNT(count)); cryp 468 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_dma_map(struct mtk_cryp *cryp, cryp 473 drivers/crypto/mediatek/mtk-sha.c ctx->dma_addr = dma_map_single(cryp->dev, ctx->buffer, cryp 475 drivers/crypto/mediatek/mtk-sha.c if (unlikely(dma_mapping_error(cryp->dev, ctx->dma_addr))) { cryp 476 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "dma map error\n"); cryp 482 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_xmit(cryp, sha, ctx->dma_addr, count, 0, 0); cryp 485 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_update_slow(struct mtk_cryp *cryp, cryp 496 drivers/crypto/mediatek/mtk-sha.c dev_dbg(cryp->dev, "slow: bufcnt: %zu\n", ctx->bufcnt); cryp 507 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_dma_map(cryp, sha, ctx, count); cryp 512 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_update_start(struct mtk_cryp *cryp, cryp 523 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_update_slow(cryp, sha); cryp 528 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_update_slow(cryp, sha); cryp 532 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_update_slow(cryp, sha); cryp 562 drivers/crypto/mediatek/mtk-sha.c ctx->dma_addr = dma_map_single(cryp->dev, ctx->buffer, cryp 564 drivers/crypto/mediatek/mtk-sha.c if (unlikely(dma_mapping_error(cryp->dev, ctx->dma_addr))) { cryp 565 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "dma map bytes error\n"); cryp 575 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_xmit(cryp, sha, ctx->dma_addr, cryp 580 drivers/crypto/mediatek/mtk-sha.c if (!dma_map_sg(cryp->dev, ctx->sg, 1, DMA_TO_DEVICE)) { cryp 581 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "dma_map_sg error\n"); cryp 586 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_xmit(cryp, sha, sg_dma_address(ctx->sg), cryp 591 drivers/crypto/mediatek/mtk-sha.c if (!dma_map_sg(cryp->dev, ctx->sg, 1, DMA_TO_DEVICE)) { cryp 592 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "dma_map_sg error\n"); cryp 598 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_xmit(cryp, sha, sg_dma_address(ctx->sg), cryp 602 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_final_req(struct mtk_cryp *cryp, cryp 614 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_dma_map(cryp, sha, ctx, count); cryp 635 drivers/crypto/mediatek/mtk-sha.c static void mtk_sha_finish_req(struct mtk_cryp *cryp, cryp 650 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_handle_queue(struct mtk_cryp *cryp, u8 id, cryp 653 drivers/crypto/mediatek/mtk-sha.c struct mtk_sha_rec *sha = cryp->sha[id]; cryp 688 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_update_start(cryp, sha); cryp 691 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_final_req(cryp, sha); cryp 693 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_final_req(cryp, sha); cryp 698 drivers/crypto/mediatek/mtk-sha.c mtk_sha_finish_req(cryp, sha, err); cryp 710 drivers/crypto/mediatek/mtk-sha.c return mtk_sha_handle_queue(tctx->cryp, tctx->id, req); cryp 713 drivers/crypto/mediatek/mtk-sha.c static void mtk_sha_unmap(struct mtk_cryp *cryp, struct mtk_sha_rec *sha) cryp 717 drivers/crypto/mediatek/mtk-sha.c dma_unmap_single(cryp->dev, ctx->ct_dma, sizeof(ctx->info), cryp 721 drivers/crypto/mediatek/mtk-sha.c dma_unmap_sg(cryp->dev, ctx->sg, 1, DMA_TO_DEVICE); cryp 728 drivers/crypto/mediatek/mtk-sha.c dma_unmap_single(cryp->dev, ctx->dma_addr, cryp 732 drivers/crypto/mediatek/mtk-sha.c dma_unmap_single(cryp->dev, ctx->dma_addr, cryp 736 drivers/crypto/mediatek/mtk-sha.c static void mtk_sha_complete(struct mtk_cryp *cryp, cryp 741 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_update_start(cryp, sha); cryp 743 drivers/crypto/mediatek/mtk-sha.c mtk_sha_finish_req(cryp, sha, err); cryp 852 drivers/crypto/mediatek/mtk-sha.c struct mtk_cryp *cryp = NULL; cryp 854 drivers/crypto/mediatek/mtk-sha.c cryp = mtk_sha_find_dev(tctx); cryp 855 drivers/crypto/mediatek/mtk-sha.c if (!cryp) cryp 1173 drivers/crypto/mediatek/mtk-sha.c mtk_sha_handle_queue(sha->cryp, sha->id - MTK_RING2, NULL); cryp 1179 drivers/crypto/mediatek/mtk-sha.c struct mtk_cryp *cryp = sha->cryp; cryp 1181 drivers/crypto/mediatek/mtk-sha.c mtk_sha_unmap(cryp, sha); cryp 1182 drivers/crypto/mediatek/mtk-sha.c mtk_sha_complete(cryp, sha); cryp 1188 drivers/crypto/mediatek/mtk-sha.c struct mtk_cryp *cryp = sha->cryp; cryp 1189 drivers/crypto/mediatek/mtk-sha.c u32 val = mtk_sha_read(cryp, RDR_STAT(sha->id)); cryp 1191 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, RDR_STAT(sha->id), val); cryp 1194 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, RDR_PROC_COUNT(sha->id), MTK_CNT_RST); cryp 1195 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, RDR_THRESH(sha->id), cryp 1200 drivers/crypto/mediatek/mtk-sha.c dev_warn(cryp->dev, "SHA interrupt when no active requests.\n"); cryp 1209 drivers/crypto/mediatek/mtk-sha.c static int mtk_sha_record_init(struct mtk_cryp *cryp) cryp 1211 drivers/crypto/mediatek/mtk-sha.c struct mtk_sha_rec **sha = cryp->sha; cryp 1219 drivers/crypto/mediatek/mtk-sha.c sha[i]->cryp = cryp; cryp 1234 drivers/crypto/mediatek/mtk-sha.c cryp->rec = 1; cryp 1244 drivers/crypto/mediatek/mtk-sha.c static void mtk_sha_record_free(struct mtk_cryp *cryp) cryp 1249 drivers/crypto/mediatek/mtk-sha.c tasklet_kill(&cryp->sha[i]->done_task); cryp 1250 drivers/crypto/mediatek/mtk-sha.c tasklet_kill(&cryp->sha[i]->queue_task); cryp 1252 drivers/crypto/mediatek/mtk-sha.c kfree(cryp->sha[i]); cryp 1296 drivers/crypto/mediatek/mtk-sha.c int mtk_hash_alg_register(struct mtk_cryp *cryp) cryp 1300 drivers/crypto/mediatek/mtk-sha.c INIT_LIST_HEAD(&cryp->sha_list); cryp 1303 drivers/crypto/mediatek/mtk-sha.c err = mtk_sha_record_init(cryp); cryp 1307 drivers/crypto/mediatek/mtk-sha.c err = devm_request_irq(cryp->dev, cryp->irq[MTK_RING2], mtk_sha_irq, cryp 1308 drivers/crypto/mediatek/mtk-sha.c 0, "mtk-sha", cryp->sha[0]); cryp 1310 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "unable to request sha irq0.\n"); cryp 1314 drivers/crypto/mediatek/mtk-sha.c err = devm_request_irq(cryp->dev, cryp->irq[MTK_RING3], mtk_sha_irq, cryp 1315 drivers/crypto/mediatek/mtk-sha.c 0, "mtk-sha", cryp->sha[1]); cryp 1317 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "unable to request sha irq1.\n"); cryp 1322 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, AIC_ENABLE_SET(MTK_RING2), MTK_IRQ_RDR2); cryp 1323 drivers/crypto/mediatek/mtk-sha.c mtk_sha_write(cryp, AIC_ENABLE_SET(MTK_RING3), MTK_IRQ_RDR3); cryp 1326 drivers/crypto/mediatek/mtk-sha.c list_add_tail(&cryp->sha_list, &mtk_sha.dev_list); cryp 1337 drivers/crypto/mediatek/mtk-sha.c list_del(&cryp->sha_list); cryp 1340 drivers/crypto/mediatek/mtk-sha.c mtk_sha_record_free(cryp); cryp 1343 drivers/crypto/mediatek/mtk-sha.c dev_err(cryp->dev, "mtk-sha initialization failed.\n"); cryp 1347 drivers/crypto/mediatek/mtk-sha.c void mtk_hash_alg_release(struct mtk_cryp *cryp) cryp 1350 drivers/crypto/mediatek/mtk-sha.c list_del(&cryp->sha_list); cryp 1354 drivers/crypto/mediatek/mtk-sha.c mtk_sha_record_free(cryp); cryp 107 drivers/crypto/stm32/stm32-cryp.c #define _walked_in (cryp->in_walk.offset - cryp->in_sg->offset) cryp 108 drivers/crypto/stm32/stm32-cryp.c #define _walked_out (cryp->out_walk.offset - cryp->out_sg->offset) cryp 118 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp; cryp 179 drivers/crypto/stm32/stm32-cryp.c static inline bool is_aes(struct stm32_cryp *cryp) cryp 181 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_AES; cryp 184 drivers/crypto/stm32/stm32-cryp.c static inline bool is_des(struct stm32_cryp *cryp) cryp 186 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_DES; cryp 189 drivers/crypto/stm32/stm32-cryp.c static inline bool is_tdes(struct stm32_cryp *cryp) cryp 191 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_TDES; cryp 194 drivers/crypto/stm32/stm32-cryp.c static inline bool is_ecb(struct stm32_cryp *cryp) cryp 196 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_ECB; cryp 199 drivers/crypto/stm32/stm32-cryp.c static inline bool is_cbc(struct stm32_cryp *cryp) cryp 201 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_CBC; cryp 204 drivers/crypto/stm32/stm32-cryp.c static inline bool is_ctr(struct stm32_cryp *cryp) cryp 206 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_CTR; cryp 209 drivers/crypto/stm32/stm32-cryp.c static inline bool is_gcm(struct stm32_cryp *cryp) cryp 211 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_GCM; cryp 214 drivers/crypto/stm32/stm32-cryp.c static inline bool is_ccm(struct stm32_cryp *cryp) cryp 216 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_CCM; cryp 219 drivers/crypto/stm32/stm32-cryp.c static inline bool is_encrypt(struct stm32_cryp *cryp) cryp 221 drivers/crypto/stm32/stm32-cryp.c return cryp->flags & FLG_ENCRYPT; cryp 224 drivers/crypto/stm32/stm32-cryp.c static inline bool is_decrypt(struct stm32_cryp *cryp) cryp 226 drivers/crypto/stm32/stm32-cryp.c return !is_encrypt(cryp); cryp 229 drivers/crypto/stm32/stm32-cryp.c static inline u32 stm32_cryp_read(struct stm32_cryp *cryp, u32 ofst) cryp 231 drivers/crypto/stm32/stm32-cryp.c return readl_relaxed(cryp->regs + ofst); cryp 234 drivers/crypto/stm32/stm32-cryp.c static inline void stm32_cryp_write(struct stm32_cryp *cryp, u32 ofst, u32 val) cryp 236 drivers/crypto/stm32/stm32-cryp.c writel_relaxed(val, cryp->regs + ofst); cryp 239 drivers/crypto/stm32/stm32-cryp.c static inline int stm32_cryp_wait_busy(struct stm32_cryp *cryp) cryp 243 drivers/crypto/stm32/stm32-cryp.c return readl_relaxed_poll_timeout(cryp->regs + CRYP_SR, status, cryp 247 drivers/crypto/stm32/stm32-cryp.c static inline int stm32_cryp_wait_enable(struct stm32_cryp *cryp) cryp 251 drivers/crypto/stm32/stm32-cryp.c return readl_relaxed_poll_timeout(cryp->regs + CRYP_CR, status, cryp 255 drivers/crypto/stm32/stm32-cryp.c static inline int stm32_cryp_wait_output(struct stm32_cryp *cryp) cryp 259 drivers/crypto/stm32/stm32-cryp.c return readl_relaxed_poll_timeout(cryp->regs + CRYP_SR, status, cryp 263 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_read_auth_tag(struct stm32_cryp *cryp); cryp 267 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *tmp, *cryp = NULL; cryp 270 drivers/crypto/stm32/stm32-cryp.c if (!ctx->cryp) { cryp 272 drivers/crypto/stm32/stm32-cryp.c cryp = tmp; cryp 275 drivers/crypto/stm32/stm32-cryp.c ctx->cryp = cryp; cryp 277 drivers/crypto/stm32/stm32-cryp.c cryp = ctx->cryp; cryp 282 drivers/crypto/stm32/stm32-cryp.c return cryp; cryp 313 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_check_io_aligned(struct stm32_cryp *cryp) cryp 317 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_check_aligned(cryp->in_sg, cryp->total_in, cryp 318 drivers/crypto/stm32/stm32-cryp.c cryp->hw_blocksize); cryp 322 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_check_aligned(cryp->out_sg, cryp->total_out, cryp 323 drivers/crypto/stm32/stm32-cryp.c cryp->hw_blocksize); cryp 342 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_copy_sgs(struct stm32_cryp *cryp) cryp 347 drivers/crypto/stm32/stm32-cryp.c if (!stm32_cryp_check_io_aligned(cryp)) { cryp 348 drivers/crypto/stm32/stm32-cryp.c cryp->sgs_copied = 0; cryp 352 drivers/crypto/stm32/stm32-cryp.c total_in = ALIGN(cryp->total_in, cryp->hw_blocksize); cryp 356 drivers/crypto/stm32/stm32-cryp.c total_out = ALIGN(cryp->total_out, cryp->hw_blocksize); cryp 361 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Can't allocate pages when unaligned\n"); cryp 362 drivers/crypto/stm32/stm32-cryp.c cryp->sgs_copied = 0; cryp 366 drivers/crypto/stm32/stm32-cryp.c sg_copy_buf(buf_in, cryp->in_sg, 0, cryp->total_in, 0); cryp 368 drivers/crypto/stm32/stm32-cryp.c sg_init_one(&cryp->in_sgl, buf_in, total_in); cryp 369 drivers/crypto/stm32/stm32-cryp.c cryp->in_sg = &cryp->in_sgl; cryp 370 drivers/crypto/stm32/stm32-cryp.c cryp->in_sg_len = 1; cryp 372 drivers/crypto/stm32/stm32-cryp.c sg_init_one(&cryp->out_sgl, buf_out, total_out); cryp 373 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg_save = cryp->out_sg; cryp 374 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg = &cryp->out_sgl; cryp 375 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg_len = 1; cryp 377 drivers/crypto/stm32/stm32-cryp.c cryp->sgs_copied = 1; cryp 382 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_hw_write_iv(struct stm32_cryp *cryp, u32 *iv) cryp 387 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV0LR, cpu_to_be32(*iv++)); cryp 388 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV0RR, cpu_to_be32(*iv++)); cryp 390 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp)) { cryp 391 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV1LR, cpu_to_be32(*iv++)); cryp 392 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV1RR, cpu_to_be32(*iv++)); cryp 396 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_get_iv(struct stm32_cryp *cryp) cryp 398 drivers/crypto/stm32/stm32-cryp.c struct ablkcipher_request *req = cryp->req; cryp 404 drivers/crypto/stm32/stm32-cryp.c *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV0LR)); cryp 405 drivers/crypto/stm32/stm32-cryp.c *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV0RR)); cryp 407 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp)) { cryp 408 drivers/crypto/stm32/stm32-cryp.c *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV1LR)); cryp 409 drivers/crypto/stm32/stm32-cryp.c *tmp++ = cpu_to_be32(stm32_cryp_read(cryp, CRYP_IV1RR)); cryp 429 drivers/crypto/stm32/stm32-cryp.c static u32 stm32_cryp_get_hw_mode(struct stm32_cryp *cryp) cryp 431 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_ecb(cryp)) cryp 434 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_cbc(cryp)) cryp 437 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_ctr(cryp)) cryp 440 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_gcm(cryp)) cryp 443 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_ccm(cryp)) cryp 446 drivers/crypto/stm32/stm32-cryp.c if (is_des(cryp) && is_ecb(cryp)) cryp 449 drivers/crypto/stm32/stm32-cryp.c if (is_des(cryp) && is_cbc(cryp)) cryp 452 drivers/crypto/stm32/stm32-cryp.c if (is_tdes(cryp) && is_ecb(cryp)) cryp 455 drivers/crypto/stm32/stm32-cryp.c if (is_tdes(cryp) && is_cbc(cryp)) cryp 458 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Unknown mode\n"); cryp 462 drivers/crypto/stm32/stm32-cryp.c static unsigned int stm32_cryp_get_input_text_len(struct stm32_cryp *cryp) cryp 464 drivers/crypto/stm32/stm32-cryp.c return is_encrypt(cryp) ? cryp->areq->cryptlen : cryp 465 drivers/crypto/stm32/stm32-cryp.c cryp->areq->cryptlen - cryp->authsize; cryp 468 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_gcm_init(struct stm32_cryp *cryp, u32 cfg) cryp 474 drivers/crypto/stm32/stm32-cryp.c memcpy(iv, cryp->areq->iv, 12); cryp 476 drivers/crypto/stm32/stm32-cryp.c cryp->gcm_ctr = GCM_CTR_INIT; cryp 477 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_hw_write_iv(cryp, iv); cryp 479 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg | CR_PH_INIT | CR_CRYPEN); cryp 482 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_wait_enable(cryp); cryp 484 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (gcm init)\n"); cryp 489 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_ccm_init(struct stm32_cryp *cryp, u32 cfg) cryp 497 drivers/crypto/stm32/stm32-cryp.c memcpy(iv, cryp->areq->iv, AES_BLOCK_SIZE); cryp 500 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_hw_write_iv(cryp, (u32 *)iv); cryp 505 drivers/crypto/stm32/stm32-cryp.c b0[0] |= (8 * ((cryp->authsize - 2) / 2)); cryp 507 drivers/crypto/stm32/stm32-cryp.c if (cryp->areq->assoclen) cryp 510 drivers/crypto/stm32/stm32-cryp.c textlen = stm32_cryp_get_input_text_len(cryp); cryp 516 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg | CR_PH_INIT | CR_CRYPEN); cryp 522 drivers/crypto/stm32/stm32-cryp.c if (!cryp->caps->padding_wa) cryp 524 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *d++); cryp 528 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_wait_enable(cryp); cryp 530 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (ccm init)\n"); cryp 535 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_hw_init(struct stm32_cryp *cryp) cryp 540 drivers/crypto/stm32/stm32-cryp.c pm_runtime_get_sync(cryp->dev); cryp 543 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 546 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_hw_write_key(cryp); cryp 551 drivers/crypto/stm32/stm32-cryp.c switch (cryp->ctx->keylen) { cryp 566 drivers/crypto/stm32/stm32-cryp.c hw_mode = stm32_cryp_get_hw_mode(cryp); cryp 571 drivers/crypto/stm32/stm32-cryp.c if (is_decrypt(cryp) && cryp 573 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg | CR_AES_KP | CR_CRYPEN); cryp 576 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_wait_busy(cryp); cryp 578 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (key preparation)\n"); cryp 585 drivers/crypto/stm32/stm32-cryp.c if (is_decrypt(cryp)) cryp 589 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 596 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_ccm_init(cryp, cfg); cryp 598 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_gcm_init(cryp, cfg); cryp 604 drivers/crypto/stm32/stm32-cryp.c if (cryp->areq->assoclen) { cryp 606 drivers/crypto/stm32/stm32-cryp.c } else if (stm32_cryp_get_input_text_len(cryp)) { cryp 608 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 619 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_hw_write_iv(cryp, (u32 *)cryp->req->info); cryp 629 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 631 drivers/crypto/stm32/stm32-cryp.c cryp->flags &= ~FLG_CCM_PADDED_WA; cryp 636 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_finish_req(struct stm32_cryp *cryp, int err) cryp 638 drivers/crypto/stm32/stm32-cryp.c if (!err && (is_gcm(cryp) || is_ccm(cryp))) cryp 640 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_read_auth_tag(cryp); cryp 642 drivers/crypto/stm32/stm32-cryp.c if (!err && (!(is_gcm(cryp) || is_ccm(cryp)))) cryp 643 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_get_iv(cryp); cryp 645 drivers/crypto/stm32/stm32-cryp.c if (cryp->sgs_copied) { cryp 649 drivers/crypto/stm32/stm32-cryp.c buf_in = sg_virt(&cryp->in_sgl); cryp 650 drivers/crypto/stm32/stm32-cryp.c buf_out = sg_virt(&cryp->out_sgl); cryp 652 drivers/crypto/stm32/stm32-cryp.c sg_copy_buf(buf_out, cryp->out_sg_save, 0, cryp 653 drivers/crypto/stm32/stm32-cryp.c cryp->total_out_save, 1); cryp 655 drivers/crypto/stm32/stm32-cryp.c len = ALIGN(cryp->total_in_save, cryp->hw_blocksize); cryp 659 drivers/crypto/stm32/stm32-cryp.c len = ALIGN(cryp->total_out_save, cryp->hw_blocksize); cryp 664 drivers/crypto/stm32/stm32-cryp.c pm_runtime_mark_last_busy(cryp->dev); cryp 665 drivers/crypto/stm32/stm32-cryp.c pm_runtime_put_autosuspend(cryp->dev); cryp 667 drivers/crypto/stm32/stm32-cryp.c if (is_gcm(cryp) || is_ccm(cryp)) cryp 668 drivers/crypto/stm32/stm32-cryp.c crypto_finalize_aead_request(cryp->engine, cryp->areq, err); cryp 670 drivers/crypto/stm32/stm32-cryp.c crypto_finalize_ablkcipher_request(cryp->engine, cryp->req, cryp 673 drivers/crypto/stm32/stm32-cryp.c memset(cryp->ctx->key, 0, cryp->ctx->keylen); cryp 676 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_cpu_start(struct stm32_cryp *cryp) cryp 679 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, IMSCR_IN | IMSCR_OUT); cryp 722 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = stm32_cryp_find_dev(ctx); cryp 724 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 729 drivers/crypto/stm32/stm32-cryp.c return crypto_transfer_ablkcipher_request_to_engine(cryp->engine, req); cryp 736 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = stm32_cryp_find_dev(ctx); cryp 738 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 743 drivers/crypto/stm32/stm32-cryp.c return crypto_transfer_aead_request_to_engine(cryp->engine, req); cryp 915 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp; cryp 925 drivers/crypto/stm32/stm32-cryp.c cryp = ctx->cryp; cryp 927 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 933 drivers/crypto/stm32/stm32-cryp.c ctx->cryp = cryp; cryp 935 drivers/crypto/stm32/stm32-cryp.c cryp->flags = (cryp->flags & ~FLG_MODE_MASK) | rctx->mode; cryp 936 drivers/crypto/stm32/stm32-cryp.c cryp->hw_blocksize = is_aes(cryp) ? AES_BLOCK_SIZE : DES_BLOCK_SIZE; cryp 937 drivers/crypto/stm32/stm32-cryp.c cryp->ctx = ctx; cryp 940 drivers/crypto/stm32/stm32-cryp.c cryp->req = req; cryp 941 drivers/crypto/stm32/stm32-cryp.c cryp->areq = NULL; cryp 942 drivers/crypto/stm32/stm32-cryp.c cryp->total_in = req->nbytes; cryp 943 drivers/crypto/stm32/stm32-cryp.c cryp->total_out = cryp->total_in; cryp 966 drivers/crypto/stm32/stm32-cryp.c cryp->areq = areq; cryp 967 drivers/crypto/stm32/stm32-cryp.c cryp->req = NULL; cryp 968 drivers/crypto/stm32/stm32-cryp.c cryp->authsize = crypto_aead_authsize(crypto_aead_reqtfm(areq)); cryp 969 drivers/crypto/stm32/stm32-cryp.c cryp->total_in = areq->assoclen + areq->cryptlen; cryp 970 drivers/crypto/stm32/stm32-cryp.c if (is_encrypt(cryp)) cryp 972 drivers/crypto/stm32/stm32-cryp.c cryp->total_out = cryp->total_in + cryp->authsize; cryp 975 drivers/crypto/stm32/stm32-cryp.c cryp->total_out = cryp->total_in - cryp->authsize; cryp 978 drivers/crypto/stm32/stm32-cryp.c cryp->total_in_save = cryp->total_in; cryp 979 drivers/crypto/stm32/stm32-cryp.c cryp->total_out_save = cryp->total_out; cryp 981 drivers/crypto/stm32/stm32-cryp.c cryp->in_sg = req ? req->src : areq->src; cryp 982 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg = req ? req->dst : areq->dst; cryp 983 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg_save = cryp->out_sg; cryp 985 drivers/crypto/stm32/stm32-cryp.c cryp->in_sg_len = sg_nents_for_len(cryp->in_sg, cryp->total_in); cryp 986 drivers/crypto/stm32/stm32-cryp.c if (cryp->in_sg_len < 0) { cryp 987 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Cannot get in_sg_len\n"); cryp 988 drivers/crypto/stm32/stm32-cryp.c ret = cryp->in_sg_len; cryp 992 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg_len = sg_nents_for_len(cryp->out_sg, cryp->total_out); cryp 993 drivers/crypto/stm32/stm32-cryp.c if (cryp->out_sg_len < 0) { cryp 994 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Cannot get out_sg_len\n"); cryp 995 drivers/crypto/stm32/stm32-cryp.c ret = cryp->out_sg_len; cryp 999 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_copy_sgs(cryp); cryp 1003 drivers/crypto/stm32/stm32-cryp.c scatterwalk_start(&cryp->in_walk, cryp->in_sg); cryp 1004 drivers/crypto/stm32/stm32-cryp.c scatterwalk_start(&cryp->out_walk, cryp->out_sg); cryp 1006 drivers/crypto/stm32/stm32-cryp.c if (is_gcm(cryp) || is_ccm(cryp)) { cryp 1008 drivers/crypto/stm32/stm32-cryp.c scatterwalk_advance(&cryp->out_walk, cryp->areq->assoclen); cryp 1009 drivers/crypto/stm32/stm32-cryp.c cryp->total_out -= cryp->areq->assoclen; cryp 1012 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_hw_init(cryp); cryp 1033 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = ctx->cryp; cryp 1035 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 1038 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_cpu_start(cryp); cryp 1054 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = ctx->cryp; cryp 1056 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 1059 drivers/crypto/stm32/stm32-cryp.c if (unlikely(!cryp->areq->assoclen && cryp 1060 drivers/crypto/stm32/stm32-cryp.c !stm32_cryp_get_input_text_len(cryp))) { cryp 1062 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, 0); cryp 1066 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_cpu_start(cryp); cryp 1069 drivers/crypto/stm32/stm32-cryp.c static u32 *stm32_cryp_next_out(struct stm32_cryp *cryp, u32 *dst, cryp 1072 drivers/crypto/stm32/stm32-cryp.c scatterwalk_advance(&cryp->out_walk, n); cryp 1074 drivers/crypto/stm32/stm32-cryp.c if (unlikely(cryp->out_sg->length == _walked_out)) { cryp 1075 drivers/crypto/stm32/stm32-cryp.c cryp->out_sg = sg_next(cryp->out_sg); cryp 1076 drivers/crypto/stm32/stm32-cryp.c if (cryp->out_sg) { cryp 1077 drivers/crypto/stm32/stm32-cryp.c scatterwalk_start(&cryp->out_walk, cryp->out_sg); cryp 1078 drivers/crypto/stm32/stm32-cryp.c return (sg_virt(cryp->out_sg) + _walked_out); cryp 1085 drivers/crypto/stm32/stm32-cryp.c static u32 *stm32_cryp_next_in(struct stm32_cryp *cryp, u32 *src, cryp 1088 drivers/crypto/stm32/stm32-cryp.c scatterwalk_advance(&cryp->in_walk, n); cryp 1090 drivers/crypto/stm32/stm32-cryp.c if (unlikely(cryp->in_sg->length == _walked_in)) { cryp 1091 drivers/crypto/stm32/stm32-cryp.c cryp->in_sg = sg_next(cryp->in_sg); cryp 1092 drivers/crypto/stm32/stm32-cryp.c if (cryp->in_sg) { cryp 1093 drivers/crypto/stm32/stm32-cryp.c scatterwalk_start(&cryp->in_walk, cryp->in_sg); cryp 1094 drivers/crypto/stm32/stm32-cryp.c return (sg_virt(cryp->in_sg) + _walked_in); cryp 1101 drivers/crypto/stm32/stm32-cryp.c static int stm32_cryp_read_auth_tag(struct stm32_cryp *cryp) cryp 1109 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1116 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1118 drivers/crypto/stm32/stm32-cryp.c if (is_gcm(cryp)) { cryp 1120 drivers/crypto/stm32/stm32-cryp.c size_bit = cryp->areq->assoclen * 8; cryp 1121 drivers/crypto/stm32/stm32-cryp.c if (cryp->caps->swap_final) cryp 1124 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1125 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, size_bit); cryp 1127 drivers/crypto/stm32/stm32-cryp.c size_bit = is_encrypt(cryp) ? cryp->areq->cryptlen : cryp 1128 drivers/crypto/stm32/stm32-cryp.c cryp->areq->cryptlen - AES_BLOCK_SIZE; cryp 1130 drivers/crypto/stm32/stm32-cryp.c if (cryp->caps->swap_final) cryp 1133 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1134 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, size_bit); cryp 1140 drivers/crypto/stm32/stm32-cryp.c memcpy(iv, cryp->areq->iv, AES_BLOCK_SIZE); cryp 1144 drivers/crypto/stm32/stm32-cryp.c if (!cryp->caps->padding_wa) cryp 1146 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *iv32++); cryp 1151 drivers/crypto/stm32/stm32-cryp.c ret = stm32_cryp_wait_output(cryp); cryp 1153 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (read tag)\n"); cryp 1157 drivers/crypto/stm32/stm32-cryp.c if (is_encrypt(cryp)) { cryp 1159 drivers/crypto/stm32/stm32-cryp.c dst = sg_virt(cryp->out_sg) + _walked_out; cryp 1162 drivers/crypto/stm32/stm32-cryp.c if (cryp->total_out >= sizeof(u32)) { cryp 1164 drivers/crypto/stm32/stm32-cryp.c *dst = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1166 drivers/crypto/stm32/stm32-cryp.c dst = stm32_cryp_next_out(cryp, dst, cryp 1168 drivers/crypto/stm32/stm32-cryp.c cryp->total_out -= sizeof(u32); cryp 1169 drivers/crypto/stm32/stm32-cryp.c } else if (!cryp->total_out) { cryp 1171 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_read(cryp, CRYP_DOUT); cryp 1174 drivers/crypto/stm32/stm32-cryp.c d32 = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1177 drivers/crypto/stm32/stm32-cryp.c for (j = 0; j < cryp->total_out; j++) { cryp 1179 drivers/crypto/stm32/stm32-cryp.c dst = stm32_cryp_next_out(cryp, dst, 1); cryp 1181 drivers/crypto/stm32/stm32-cryp.c cryp->total_out = 0; cryp 1188 drivers/crypto/stm32/stm32-cryp.c scatterwalk_map_and_copy(in_tag, cryp->in_sg, cryp 1189 drivers/crypto/stm32/stm32-cryp.c cryp->total_in_save - cryp->authsize, cryp 1190 drivers/crypto/stm32/stm32-cryp.c cryp->authsize, 0); cryp 1193 drivers/crypto/stm32/stm32-cryp.c out_tag[i] = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1195 drivers/crypto/stm32/stm32-cryp.c if (crypto_memneq(in_tag, out_tag, cryp->authsize)) cryp 1201 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1206 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_check_ctr_counter(struct stm32_cryp *cryp) cryp 1210 drivers/crypto/stm32/stm32-cryp.c if (unlikely(cryp->last_ctr[3] == 0xFFFFFFFF)) { cryp 1211 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[3] = 0; cryp 1212 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[2]++; cryp 1213 drivers/crypto/stm32/stm32-cryp.c if (!cryp->last_ctr[2]) { cryp 1214 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[1]++; cryp 1215 drivers/crypto/stm32/stm32-cryp.c if (!cryp->last_ctr[1]) cryp 1216 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[0]++; cryp 1219 drivers/crypto/stm32/stm32-cryp.c cr = stm32_cryp_read(cryp, CRYP_CR); cryp 1220 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cr & ~CR_CRYPEN); cryp 1222 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_hw_write_iv(cryp, (u32 *)cryp->last_ctr); cryp 1224 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cr); cryp 1227 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[0] = stm32_cryp_read(cryp, CRYP_IV0LR); cryp 1228 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[1] = stm32_cryp_read(cryp, CRYP_IV0RR); cryp 1229 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[2] = stm32_cryp_read(cryp, CRYP_IV1LR); cryp 1230 drivers/crypto/stm32/stm32-cryp.c cryp->last_ctr[3] = stm32_cryp_read(cryp, CRYP_IV1RR); cryp 1233 drivers/crypto/stm32/stm32-cryp.c static bool stm32_cryp_irq_read_data(struct stm32_cryp *cryp) cryp 1241 drivers/crypto/stm32/stm32-cryp.c if (is_encrypt(cryp) && (is_gcm(cryp) || is_ccm(cryp))) cryp 1242 drivers/crypto/stm32/stm32-cryp.c tag_size = cryp->authsize; cryp 1246 drivers/crypto/stm32/stm32-cryp.c dst = sg_virt(cryp->out_sg) + _walked_out; cryp 1248 drivers/crypto/stm32/stm32-cryp.c for (i = 0; i < cryp->hw_blocksize / sizeof(u32); i++) { cryp 1249 drivers/crypto/stm32/stm32-cryp.c if (likely(cryp->total_out - tag_size >= sizeof(u32))) { cryp 1251 drivers/crypto/stm32/stm32-cryp.c *dst = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1253 drivers/crypto/stm32/stm32-cryp.c dst = stm32_cryp_next_out(cryp, dst, sizeof(u32)); cryp 1254 drivers/crypto/stm32/stm32-cryp.c cryp->total_out -= sizeof(u32); cryp 1255 drivers/crypto/stm32/stm32-cryp.c } else if (cryp->total_out == tag_size) { cryp 1257 drivers/crypto/stm32/stm32-cryp.c d32 = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1260 drivers/crypto/stm32/stm32-cryp.c d32 = stm32_cryp_read(cryp, CRYP_DOUT); cryp 1263 drivers/crypto/stm32/stm32-cryp.c for (j = 0; j < cryp->total_out - tag_size; j++) { cryp 1265 drivers/crypto/stm32/stm32-cryp.c dst = stm32_cryp_next_out(cryp, dst, 1); cryp 1267 drivers/crypto/stm32/stm32-cryp.c cryp->total_out = tag_size; cryp 1271 drivers/crypto/stm32/stm32-cryp.c return !(cryp->total_out - tag_size) || !cryp->total_in; cryp 1274 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_block(struct stm32_cryp *cryp) cryp 1282 drivers/crypto/stm32/stm32-cryp.c if (is_decrypt(cryp) && (is_gcm(cryp) || is_ccm(cryp))) cryp 1283 drivers/crypto/stm32/stm32-cryp.c tag_size = cryp->authsize; cryp 1287 drivers/crypto/stm32/stm32-cryp.c src = sg_virt(cryp->in_sg) + _walked_in; cryp 1289 drivers/crypto/stm32/stm32-cryp.c for (i = 0; i < cryp->hw_blocksize / sizeof(u32); i++) { cryp 1290 drivers/crypto/stm32/stm32-cryp.c if (likely(cryp->total_in - tag_size >= sizeof(u32))) { cryp 1292 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *src); cryp 1294 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, sizeof(u32)); cryp 1295 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= sizeof(u32); cryp 1296 drivers/crypto/stm32/stm32-cryp.c } else if (cryp->total_in == tag_size) { cryp 1298 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1302 drivers/crypto/stm32/stm32-cryp.c for (j = 0; j < cryp->total_in - tag_size; j++) { cryp 1304 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1307 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *(u32 *)d8); cryp 1308 drivers/crypto/stm32/stm32-cryp.c cryp->total_in = tag_size; cryp 1313 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_gcm_padded_data(struct stm32_cryp *cryp) cryp 1317 drivers/crypto/stm32/stm32-cryp.c size_t total_in_ori = cryp->total_in; cryp 1318 drivers/crypto/stm32/stm32-cryp.c struct scatterlist *out_sg_ori = cryp->out_sg; cryp 1324 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 1325 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1327 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1330 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV1RR, cryp->gcm_ctr - 2); cryp 1335 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1339 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1342 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_block(cryp); cryp 1343 drivers/crypto/stm32/stm32-cryp.c cryp->total_in = total_in_ori; cryp 1344 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_output(cryp); cryp 1346 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (write gcm header)\n"); cryp 1347 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_finish_req(cryp, err); cryp 1351 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_read_data(cryp); cryp 1353 drivers/crypto/stm32/stm32-cryp.c cryp->total_in_save - total_in_ori, cryp 1359 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1364 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1368 drivers/crypto/stm32/stm32-cryp.c if (cryp->total_in) cryp 1369 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, tmp[i]); cryp 1371 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1373 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= min_t(size_t, sizeof(u32), cryp->total_in); cryp 1377 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_output(cryp); cryp 1379 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (write gcm header)\n"); cryp 1380 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_finish_req(cryp, err); cryp 1384 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_read(cryp, CRYP_DOUT); cryp 1387 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, 0); cryp 1390 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_set_npblb(struct stm32_cryp *cryp) cryp 1395 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1397 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1399 drivers/crypto/stm32/stm32-cryp.c payload_bytes = is_decrypt(cryp) ? cryp->total_in - cryp->authsize : cryp 1400 drivers/crypto/stm32/stm32-cryp.c cryp->total_in; cryp 1401 drivers/crypto/stm32/stm32-cryp.c cfg |= (cryp->hw_blocksize - payload_bytes) << CR_NBPBL_SHIFT; cryp 1403 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1406 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_ccm_padded_data(struct stm32_cryp *cryp) cryp 1411 drivers/crypto/stm32/stm32-cryp.c size_t last_total_out, total_in_ori = cryp->total_in; cryp 1412 drivers/crypto/stm32/stm32-cryp.c struct scatterlist *out_sg_ori = cryp->out_sg; cryp 1416 drivers/crypto/stm32/stm32-cryp.c cryp->flags |= FLG_CCM_PADDED_WA; cryp 1419 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 1421 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1423 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1426 drivers/crypto/stm32/stm32-cryp.c iv1tmp = stm32_cryp_read(cryp, CRYP_CSGCMCCM0R + 7 * 4); cryp 1430 drivers/crypto/stm32/stm32-cryp.c cstmp1[i] = stm32_cryp_read(cryp, CRYP_CSGCMCCM0R + i * 4); cryp 1433 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IV1RR, iv1tmp); cryp 1438 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1442 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1445 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_block(cryp); cryp 1446 drivers/crypto/stm32/stm32-cryp.c cryp->total_in = total_in_ori; cryp 1447 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_output(cryp); cryp 1449 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (wite ccm padded data)\n"); cryp 1450 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_finish_req(cryp, err); cryp 1454 drivers/crypto/stm32/stm32-cryp.c last_total_out = cryp->total_out; cryp 1455 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_read_data(cryp); cryp 1459 drivers/crypto/stm32/stm32-cryp.c cryp->total_out_save - last_total_out, cryp 1464 drivers/crypto/stm32/stm32-cryp.c cstmp2[i] = stm32_cryp_read(cryp, CRYP_CSGCMCCM0R + i * 4); cryp 1469 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1474 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1480 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, tmp[i]); cryp 1484 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_busy(cryp); cryp 1486 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (wite ccm padded data)\n"); cryp 1489 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, err); cryp 1492 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_data(struct stm32_cryp *cryp) cryp 1494 drivers/crypto/stm32/stm32-cryp.c if (unlikely(!cryp->total_in)) { cryp 1495 drivers/crypto/stm32/stm32-cryp.c dev_warn(cryp->dev, "No more data to process\n"); cryp 1499 drivers/crypto/stm32/stm32-cryp.c if (unlikely(cryp->total_in < AES_BLOCK_SIZE && cryp 1500 drivers/crypto/stm32/stm32-cryp.c (stm32_cryp_get_hw_mode(cryp) == CR_AES_GCM) && cryp 1501 drivers/crypto/stm32/stm32-cryp.c is_encrypt(cryp))) { cryp 1503 drivers/crypto/stm32/stm32-cryp.c if (cryp->caps->padding_wa) cryp 1505 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_irq_write_gcm_padded_data(cryp); cryp 1508 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_set_npblb(cryp); cryp 1511 drivers/crypto/stm32/stm32-cryp.c if (unlikely((cryp->total_in - cryp->authsize < AES_BLOCK_SIZE) && cryp 1512 drivers/crypto/stm32/stm32-cryp.c (stm32_cryp_get_hw_mode(cryp) == CR_AES_CCM) && cryp 1513 drivers/crypto/stm32/stm32-cryp.c is_decrypt(cryp))) { cryp 1515 drivers/crypto/stm32/stm32-cryp.c if (cryp->caps->padding_wa) cryp 1517 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_irq_write_ccm_padded_data(cryp); cryp 1520 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_set_npblb(cryp); cryp 1523 drivers/crypto/stm32/stm32-cryp.c if (is_aes(cryp) && is_ctr(cryp)) cryp 1524 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_check_ctr_counter(cryp); cryp 1526 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_block(cryp); cryp 1529 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_gcm_header(struct stm32_cryp *cryp) cryp 1535 drivers/crypto/stm32/stm32-cryp.c src = sg_virt(cryp->in_sg) + _walked_in; cryp 1538 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *src); cryp 1540 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, sizeof(u32)); cryp 1541 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= min_t(size_t, sizeof(u32), cryp->total_in); cryp 1544 drivers/crypto/stm32/stm32-cryp.c if ((cryp->total_in_save - cryp->total_in) == cryp 1545 drivers/crypto/stm32/stm32-cryp.c cryp->areq->assoclen) { cryp 1548 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1551 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_busy(cryp); cryp 1553 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (gcm header)\n"); cryp 1554 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_finish_req(cryp, err); cryp 1557 drivers/crypto/stm32/stm32-cryp.c if (stm32_cryp_get_input_text_len(cryp)) { cryp 1559 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1561 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1566 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1569 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 1570 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, 0); cryp 1576 drivers/crypto/stm32/stm32-cryp.c if (!cryp->total_in) cryp 1581 drivers/crypto/stm32/stm32-cryp.c static void stm32_cryp_irq_write_ccm_header(struct stm32_cryp *cryp) cryp 1588 drivers/crypto/stm32/stm32-cryp.c src = sg_virt(cryp->in_sg) + _walked_in; cryp 1589 drivers/crypto/stm32/stm32-cryp.c alen = cryp->areq->assoclen; cryp 1592 drivers/crypto/stm32/stm32-cryp.c if (cryp->areq->assoclen <= 65280) { cryp 1597 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1599 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1601 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *(u32 *)d8); cryp 1604 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= min_t(size_t, 2, cryp->total_in); cryp 1612 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *(u32 *)d8); cryp 1618 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1620 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1622 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *(u32 *)d8); cryp 1625 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= min_t(size_t, 2, cryp->total_in); cryp 1635 drivers/crypto/stm32/stm32-cryp.c src = stm32_cryp_next_in(cryp, src, 1); cryp 1637 drivers/crypto/stm32/stm32-cryp.c cryp->total_in -= min_t(size_t, 1, cryp->total_in); cryp 1638 drivers/crypto/stm32/stm32-cryp.c if ((cryp->total_in_save - cryp->total_in) == alen) cryp 1642 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, *(u32 *)d8); cryp 1644 drivers/crypto/stm32/stm32-cryp.c if ((cryp->total_in_save - cryp->total_in) == alen) { cryp 1647 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_DIN, 0); cryp 1650 drivers/crypto/stm32/stm32-cryp.c err = stm32_cryp_wait_busy(cryp); cryp 1652 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Timeout (ccm header)\n"); cryp 1653 drivers/crypto/stm32/stm32-cryp.c return stm32_cryp_finish_req(cryp, err); cryp 1656 drivers/crypto/stm32/stm32-cryp.c if (stm32_cryp_get_input_text_len(cryp)) { cryp 1658 drivers/crypto/stm32/stm32-cryp.c cfg = stm32_cryp_read(cryp, CRYP_CR); cryp 1660 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1665 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_CR, cfg); cryp 1668 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 1669 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, 0); cryp 1679 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = arg; cryp 1682 drivers/crypto/stm32/stm32-cryp.c if (cryp->irq_status & MISR_OUT) cryp 1684 drivers/crypto/stm32/stm32-cryp.c if (unlikely(stm32_cryp_irq_read_data(cryp))) { cryp 1686 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_write(cryp, CRYP_IMSCR, 0); cryp 1687 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_finish_req(cryp, 0); cryp 1691 drivers/crypto/stm32/stm32-cryp.c if (cryp->irq_status & MISR_IN) { cryp 1692 drivers/crypto/stm32/stm32-cryp.c if (is_gcm(cryp)) { cryp 1693 drivers/crypto/stm32/stm32-cryp.c ph = stm32_cryp_read(cryp, CRYP_CR) & CR_PH_MASK; cryp 1696 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_gcm_header(cryp); cryp 1699 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_data(cryp); cryp 1700 drivers/crypto/stm32/stm32-cryp.c cryp->gcm_ctr++; cryp 1701 drivers/crypto/stm32/stm32-cryp.c } else if (is_ccm(cryp)) { cryp 1702 drivers/crypto/stm32/stm32-cryp.c ph = stm32_cryp_read(cryp, CRYP_CR) & CR_PH_MASK; cryp 1705 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_ccm_header(cryp); cryp 1708 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_data(cryp); cryp 1711 drivers/crypto/stm32/stm32-cryp.c stm32_cryp_irq_write_data(cryp); cryp 1720 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = arg; cryp 1722 drivers/crypto/stm32/stm32-cryp.c cryp->irq_status = stm32_cryp_read(cryp, CRYP_MISR); cryp 1937 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp; cryp 1941 drivers/crypto/stm32/stm32-cryp.c cryp = devm_kzalloc(dev, sizeof(*cryp), GFP_KERNEL); cryp 1942 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 1945 drivers/crypto/stm32/stm32-cryp.c cryp->caps = of_device_get_match_data(dev); cryp 1946 drivers/crypto/stm32/stm32-cryp.c if (!cryp->caps) cryp 1949 drivers/crypto/stm32/stm32-cryp.c cryp->dev = dev; cryp 1951 drivers/crypto/stm32/stm32-cryp.c cryp->regs = devm_platform_ioremap_resource(pdev, 0); cryp 1952 drivers/crypto/stm32/stm32-cryp.c if (IS_ERR(cryp->regs)) cryp 1953 drivers/crypto/stm32/stm32-cryp.c return PTR_ERR(cryp->regs); cryp 1961 drivers/crypto/stm32/stm32-cryp.c dev_name(dev), cryp); cryp 1967 drivers/crypto/stm32/stm32-cryp.c cryp->clk = devm_clk_get(dev, NULL); cryp 1968 drivers/crypto/stm32/stm32-cryp.c if (IS_ERR(cryp->clk)) { cryp 1970 drivers/crypto/stm32/stm32-cryp.c return PTR_ERR(cryp->clk); cryp 1973 drivers/crypto/stm32/stm32-cryp.c ret = clk_prepare_enable(cryp->clk); cryp 1975 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Failed to enable clock\n"); cryp 1993 drivers/crypto/stm32/stm32-cryp.c platform_set_drvdata(pdev, cryp); cryp 1996 drivers/crypto/stm32/stm32-cryp.c list_add(&cryp->list, &cryp_list.dev_list); cryp 2000 drivers/crypto/stm32/stm32-cryp.c cryp->engine = crypto_engine_alloc_init(dev, 1); cryp 2001 drivers/crypto/stm32/stm32-cryp.c if (!cryp->engine) { cryp 2007 drivers/crypto/stm32/stm32-cryp.c ret = crypto_engine_start(cryp->engine); cryp 2033 drivers/crypto/stm32/stm32-cryp.c crypto_engine_exit(cryp->engine); cryp 2036 drivers/crypto/stm32/stm32-cryp.c list_del(&cryp->list); cryp 2044 drivers/crypto/stm32/stm32-cryp.c clk_disable_unprepare(cryp->clk); cryp 2051 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = platform_get_drvdata(pdev); cryp 2054 drivers/crypto/stm32/stm32-cryp.c if (!cryp) cryp 2057 drivers/crypto/stm32/stm32-cryp.c ret = pm_runtime_get_sync(cryp->dev); cryp 2064 drivers/crypto/stm32/stm32-cryp.c crypto_engine_exit(cryp->engine); cryp 2067 drivers/crypto/stm32/stm32-cryp.c list_del(&cryp->list); cryp 2070 drivers/crypto/stm32/stm32-cryp.c pm_runtime_disable(cryp->dev); cryp 2071 drivers/crypto/stm32/stm32-cryp.c pm_runtime_put_noidle(cryp->dev); cryp 2073 drivers/crypto/stm32/stm32-cryp.c clk_disable_unprepare(cryp->clk); cryp 2081 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = dev_get_drvdata(dev); cryp 2083 drivers/crypto/stm32/stm32-cryp.c clk_disable_unprepare(cryp->clk); cryp 2090 drivers/crypto/stm32/stm32-cryp.c struct stm32_cryp *cryp = dev_get_drvdata(dev); cryp 2093 drivers/crypto/stm32/stm32-cryp.c ret = clk_prepare_enable(cryp->clk); cryp 2095 drivers/crypto/stm32/stm32-cryp.c dev_err(cryp->dev, "Failed to prepare_enable clock\n");