Lines Matching refs:sdcp

174 	struct dcp *sdcp = global_sdcp;  in mxs_dcp_start_dma()  local
178 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_start_dma()
179 dma_addr_t desc_phys = dma_map_single(sdcp->dev, desc, sizeof(*desc), in mxs_dcp_start_dma()
182 dma_err = dma_mapping_error(sdcp->dev, desc_phys); in mxs_dcp_start_dma()
186 reinit_completion(&sdcp->completion[chan]); in mxs_dcp_start_dma()
189 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(chan)); in mxs_dcp_start_dma()
192 writel(desc_phys, sdcp->base + MXS_DCP_CH_N_CMDPTR(chan)); in mxs_dcp_start_dma()
195 writel(1, sdcp->base + MXS_DCP_CH_N_SEMA(chan)); in mxs_dcp_start_dma()
197 ret = wait_for_completion_timeout(&sdcp->completion[chan], in mxs_dcp_start_dma()
200 dev_err(sdcp->dev, "Channel %i timeout (DCP_STAT=0x%08x)\n", in mxs_dcp_start_dma()
201 chan, readl(sdcp->base + MXS_DCP_STAT)); in mxs_dcp_start_dma()
205 stat = readl(sdcp->base + MXS_DCP_CH_N_STAT(chan)); in mxs_dcp_start_dma()
207 dev_err(sdcp->dev, "Channel %i error (CH_STAT=0x%08x)\n", in mxs_dcp_start_dma()
212 dma_unmap_single(sdcp->dev, desc_phys, sizeof(*desc), DMA_TO_DEVICE); in mxs_dcp_start_dma()
224 struct dcp *sdcp = global_sdcp; in mxs_dcp_run_aes() local
225 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_run_aes()
229 key_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_key, in mxs_dcp_run_aes()
231 ret = dma_mapping_error(sdcp->dev, key_phys); in mxs_dcp_run_aes()
235 src_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_in_buf, in mxs_dcp_run_aes()
237 ret = dma_mapping_error(sdcp->dev, src_phys); in mxs_dcp_run_aes()
241 dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, in mxs_dcp_run_aes()
243 ret = dma_mapping_error(sdcp->dev, dst_phys); in mxs_dcp_run_aes()
248 dev_err(sdcp->dev, "Invalid block size!\n"); in mxs_dcp_run_aes()
283 dma_unmap_single(sdcp->dev, dst_phys, DCP_BUF_SZ, DMA_FROM_DEVICE); in mxs_dcp_run_aes()
285 dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); in mxs_dcp_run_aes()
287 dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128, in mxs_dcp_run_aes()
295 struct dcp *sdcp = global_sdcp; in mxs_dcp_aes_block_crypt() local
306 uint8_t *in_buf = sdcp->coh->aes_in_buf; in mxs_dcp_aes_block_crypt()
307 uint8_t *out_buf = sdcp->coh->aes_out_buf; in mxs_dcp_aes_block_crypt()
313 uint8_t *key = sdcp->coh->aes_key; in mxs_dcp_aes_block_crypt()
392 struct dcp *sdcp = global_sdcp; in dcp_chan_thread_aes() local
403 spin_lock(&sdcp->lock[chan]); in dcp_chan_thread_aes()
404 backlog = crypto_get_backlog(&sdcp->queue[chan]); in dcp_chan_thread_aes()
405 arq = crypto_dequeue_request(&sdcp->queue[chan]); in dcp_chan_thread_aes()
406 spin_unlock(&sdcp->lock[chan]); in dcp_chan_thread_aes()
450 struct dcp *sdcp = global_sdcp; in mxs_dcp_aes_enqueue() local
463 spin_lock(&sdcp->lock[actx->chan]); in mxs_dcp_aes_enqueue()
464 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); in mxs_dcp_aes_enqueue()
465 spin_unlock(&sdcp->lock[actx->chan]); in mxs_dcp_aes_enqueue()
467 wake_up_process(sdcp->thread[actx->chan]); in mxs_dcp_aes_enqueue()
547 struct dcp *sdcp = global_sdcp; in mxs_dcp_run_sha() local
553 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_run_sha()
556 dma_addr_t buf_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_in_buf, in mxs_dcp_run_sha()
559 ret = dma_mapping_error(sdcp->dev, buf_phys); in mxs_dcp_run_sha()
586 memcpy(sdcp->coh->sha_out_buf, sha_buf, halg->digestsize); in mxs_dcp_run_sha()
593 digest_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_out_buf, in mxs_dcp_run_sha()
595 ret = dma_mapping_error(sdcp->dev, digest_phys); in mxs_dcp_run_sha()
606 dma_unmap_single(sdcp->dev, digest_phys, DCP_SHA_PAY_SZ, in mxs_dcp_run_sha()
610 dma_unmap_single(sdcp->dev, buf_phys, DCP_BUF_SZ, DMA_TO_DEVICE); in mxs_dcp_run_sha()
617 struct dcp *sdcp = global_sdcp; in dcp_sha_req_to_buf() local
625 uint8_t *in_buf = sdcp->coh->sha_in_buf; in dcp_sha_req_to_buf()
626 uint8_t *out_buf = sdcp->coh->sha_out_buf; in dcp_sha_req_to_buf()
689 struct dcp *sdcp = global_sdcp; in dcp_chan_thread_sha() local
699 spin_lock(&sdcp->lock[chan]); in dcp_chan_thread_sha()
700 backlog = crypto_get_backlog(&sdcp->queue[chan]); in dcp_chan_thread_sha()
701 arq = crypto_dequeue_request(&sdcp->queue[chan]); in dcp_chan_thread_sha()
702 spin_unlock(&sdcp->lock[chan]); in dcp_chan_thread_sha()
752 struct dcp *sdcp = global_sdcp; in dcp_sha_update_fx() local
776 spin_lock(&sdcp->lock[actx->chan]); in dcp_sha_update_fx()
777 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); in dcp_sha_update_fx()
778 spin_unlock(&sdcp->lock[actx->chan]); in dcp_sha_update_fx()
780 wake_up_process(sdcp->thread[actx->chan]); in dcp_sha_update_fx()
951 struct dcp *sdcp = context; in mxs_dcp_irq() local
955 stat = readl(sdcp->base + MXS_DCP_STAT); in mxs_dcp_irq()
961 writel(stat, sdcp->base + MXS_DCP_STAT_CLR); in mxs_dcp_irq()
966 complete(&sdcp->completion[i]); in mxs_dcp_irq()
974 struct dcp *sdcp = NULL; in mxs_dcp_probe() local
991 sdcp = devm_kzalloc(dev, sizeof(*sdcp), GFP_KERNEL); in mxs_dcp_probe()
992 if (!sdcp) in mxs_dcp_probe()
995 sdcp->dev = dev; in mxs_dcp_probe()
996 sdcp->base = devm_platform_ioremap_resource(pdev, 0); in mxs_dcp_probe()
997 if (IS_ERR(sdcp->base)) in mxs_dcp_probe()
998 return PTR_ERR(sdcp->base); in mxs_dcp_probe()
1002 "dcp-vmi-irq", sdcp); in mxs_dcp_probe()
1009 "dcp-irq", sdcp); in mxs_dcp_probe()
1016 sdcp->coh = devm_kzalloc(dev, sizeof(*sdcp->coh) + DCP_ALIGNMENT, in mxs_dcp_probe()
1018 if (!sdcp->coh) in mxs_dcp_probe()
1022 sdcp->coh = PTR_ALIGN(sdcp->coh, DCP_ALIGNMENT); in mxs_dcp_probe()
1025 sdcp->dcp_clk = devm_clk_get(dev, "dcp"); in mxs_dcp_probe()
1026 if (IS_ERR(sdcp->dcp_clk)) { in mxs_dcp_probe()
1027 if (sdcp->dcp_clk != ERR_PTR(-ENOENT)) in mxs_dcp_probe()
1028 return PTR_ERR(sdcp->dcp_clk); in mxs_dcp_probe()
1029 sdcp->dcp_clk = NULL; in mxs_dcp_probe()
1031 ret = clk_prepare_enable(sdcp->dcp_clk); in mxs_dcp_probe()
1036 ret = stmp_reset_block(sdcp->base); in mxs_dcp_probe()
1045 sdcp->base + MXS_DCP_CTRL); in mxs_dcp_probe()
1049 sdcp->base + MXS_DCP_CHANNELCTRL); in mxs_dcp_probe()
1058 writel(0xffff0000, sdcp->base + MXS_DCP_CONTEXT); in mxs_dcp_probe()
1060 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(i)); in mxs_dcp_probe()
1061 writel(0xffffffff, sdcp->base + MXS_DCP_STAT_CLR); in mxs_dcp_probe()
1063 global_sdcp = sdcp; in mxs_dcp_probe()
1065 platform_set_drvdata(pdev, sdcp); in mxs_dcp_probe()
1068 spin_lock_init(&sdcp->lock[i]); in mxs_dcp_probe()
1069 init_completion(&sdcp->completion[i]); in mxs_dcp_probe()
1070 crypto_init_queue(&sdcp->queue[i], 50); in mxs_dcp_probe()
1074 sdcp->thread[DCP_CHAN_HASH_SHA] = kthread_run(dcp_chan_thread_sha, in mxs_dcp_probe()
1076 if (IS_ERR(sdcp->thread[DCP_CHAN_HASH_SHA])) { in mxs_dcp_probe()
1078 ret = PTR_ERR(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_probe()
1082 sdcp->thread[DCP_CHAN_CRYPTO] = kthread_run(dcp_chan_thread_aes, in mxs_dcp_probe()
1084 if (IS_ERR(sdcp->thread[DCP_CHAN_CRYPTO])) { in mxs_dcp_probe()
1086 ret = PTR_ERR(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_probe()
1091 sdcp->caps = readl(sdcp->base + MXS_DCP_CAPABILITY1); in mxs_dcp_probe()
1093 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) { in mxs_dcp_probe()
1103 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) { in mxs_dcp_probe()
1112 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) { in mxs_dcp_probe()
1124 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) in mxs_dcp_probe()
1128 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) in mxs_dcp_probe()
1132 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_probe()
1135 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_probe()
1138 clk_disable_unprepare(sdcp->dcp_clk); in mxs_dcp_probe()
1145 struct dcp *sdcp = platform_get_drvdata(pdev); in mxs_dcp_remove() local
1147 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) in mxs_dcp_remove()
1150 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) in mxs_dcp_remove()
1153 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) in mxs_dcp_remove()
1156 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_remove()
1157 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_remove()
1159 clk_disable_unprepare(sdcp->dcp_clk); in mxs_dcp_remove()