Lines Matching refs:sdcp

173 	struct dcp *sdcp = global_sdcp;  in mxs_dcp_start_dma()  local
177 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_start_dma()
178 dma_addr_t desc_phys = dma_map_single(sdcp->dev, desc, sizeof(*desc), in mxs_dcp_start_dma()
181 dma_err = dma_mapping_error(sdcp->dev, desc_phys); in mxs_dcp_start_dma()
185 reinit_completion(&sdcp->completion[chan]); in mxs_dcp_start_dma()
188 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(chan)); in mxs_dcp_start_dma()
191 writel(desc_phys, sdcp->base + MXS_DCP_CH_N_CMDPTR(chan)); in mxs_dcp_start_dma()
194 writel(1, sdcp->base + MXS_DCP_CH_N_SEMA(chan)); in mxs_dcp_start_dma()
196 ret = wait_for_completion_timeout(&sdcp->completion[chan], in mxs_dcp_start_dma()
199 dev_err(sdcp->dev, "Channel %i timeout (DCP_STAT=0x%08x)\n", in mxs_dcp_start_dma()
200 chan, readl(sdcp->base + MXS_DCP_STAT)); in mxs_dcp_start_dma()
204 stat = readl(sdcp->base + MXS_DCP_CH_N_STAT(chan)); in mxs_dcp_start_dma()
206 dev_err(sdcp->dev, "Channel %i error (CH_STAT=0x%08x)\n", in mxs_dcp_start_dma()
211 dma_unmap_single(sdcp->dev, desc_phys, sizeof(*desc), DMA_TO_DEVICE); in mxs_dcp_start_dma()
223 struct dcp *sdcp = global_sdcp; in mxs_dcp_run_aes() local
224 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_run_aes()
228 key_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_key, in mxs_dcp_run_aes()
230 ret = dma_mapping_error(sdcp->dev, key_phys); in mxs_dcp_run_aes()
234 src_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_in_buf, in mxs_dcp_run_aes()
236 ret = dma_mapping_error(sdcp->dev, src_phys); in mxs_dcp_run_aes()
240 dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, in mxs_dcp_run_aes()
242 ret = dma_mapping_error(sdcp->dev, dst_phys); in mxs_dcp_run_aes()
247 dev_err(sdcp->dev, "Invalid block size!\n"); in mxs_dcp_run_aes()
282 dma_unmap_single(sdcp->dev, dst_phys, DCP_BUF_SZ, DMA_FROM_DEVICE); in mxs_dcp_run_aes()
284 dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); in mxs_dcp_run_aes()
286 dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128, in mxs_dcp_run_aes()
294 struct dcp *sdcp = global_sdcp; in mxs_dcp_aes_block_crypt() local
305 uint8_t *in_buf = sdcp->coh->aes_in_buf; in mxs_dcp_aes_block_crypt()
306 uint8_t *out_buf = sdcp->coh->aes_out_buf; in mxs_dcp_aes_block_crypt()
312 uint8_t *key = sdcp->coh->aes_key; in mxs_dcp_aes_block_crypt()
391 struct dcp *sdcp = global_sdcp; in dcp_chan_thread_aes() local
402 spin_lock(&sdcp->lock[chan]); in dcp_chan_thread_aes()
403 backlog = crypto_get_backlog(&sdcp->queue[chan]); in dcp_chan_thread_aes()
404 arq = crypto_dequeue_request(&sdcp->queue[chan]); in dcp_chan_thread_aes()
405 spin_unlock(&sdcp->lock[chan]); in dcp_chan_thread_aes()
449 struct dcp *sdcp = global_sdcp; in mxs_dcp_aes_enqueue() local
462 spin_lock(&sdcp->lock[actx->chan]); in mxs_dcp_aes_enqueue()
463 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); in mxs_dcp_aes_enqueue()
464 spin_unlock(&sdcp->lock[actx->chan]); in mxs_dcp_aes_enqueue()
466 wake_up_process(sdcp->thread[actx->chan]); in mxs_dcp_aes_enqueue()
546 struct dcp *sdcp = global_sdcp; in mxs_dcp_run_sha() local
552 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; in mxs_dcp_run_sha()
555 dma_addr_t buf_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_in_buf, in mxs_dcp_run_sha()
558 ret = dma_mapping_error(sdcp->dev, buf_phys); in mxs_dcp_run_sha()
585 memcpy(sdcp->coh->sha_out_buf, sha_buf, halg->digestsize); in mxs_dcp_run_sha()
592 digest_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_out_buf, in mxs_dcp_run_sha()
594 ret = dma_mapping_error(sdcp->dev, digest_phys); in mxs_dcp_run_sha()
605 dma_unmap_single(sdcp->dev, digest_phys, DCP_SHA_PAY_SZ, in mxs_dcp_run_sha()
609 dma_unmap_single(sdcp->dev, buf_phys, DCP_BUF_SZ, DMA_TO_DEVICE); in mxs_dcp_run_sha()
616 struct dcp *sdcp = global_sdcp; in dcp_sha_req_to_buf() local
624 uint8_t *in_buf = sdcp->coh->sha_in_buf; in dcp_sha_req_to_buf()
625 uint8_t *out_buf = sdcp->coh->sha_out_buf; in dcp_sha_req_to_buf()
688 struct dcp *sdcp = global_sdcp; in dcp_chan_thread_sha() local
698 spin_lock(&sdcp->lock[chan]); in dcp_chan_thread_sha()
699 backlog = crypto_get_backlog(&sdcp->queue[chan]); in dcp_chan_thread_sha()
700 arq = crypto_dequeue_request(&sdcp->queue[chan]); in dcp_chan_thread_sha()
701 spin_unlock(&sdcp->lock[chan]); in dcp_chan_thread_sha()
751 struct dcp *sdcp = global_sdcp; in dcp_sha_update_fx() local
775 spin_lock(&sdcp->lock[actx->chan]); in dcp_sha_update_fx()
776 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); in dcp_sha_update_fx()
777 spin_unlock(&sdcp->lock[actx->chan]); in dcp_sha_update_fx()
779 wake_up_process(sdcp->thread[actx->chan]); in dcp_sha_update_fx()
950 struct dcp *sdcp = context; in mxs_dcp_irq() local
954 stat = readl(sdcp->base + MXS_DCP_STAT); in mxs_dcp_irq()
960 writel(stat, sdcp->base + MXS_DCP_STAT_CLR); in mxs_dcp_irq()
965 complete(&sdcp->completion[i]); in mxs_dcp_irq()
973 struct dcp *sdcp = NULL; in mxs_dcp_probe() local
990 sdcp = devm_kzalloc(dev, sizeof(*sdcp), GFP_KERNEL); in mxs_dcp_probe()
991 if (!sdcp) in mxs_dcp_probe()
994 sdcp->dev = dev; in mxs_dcp_probe()
995 sdcp->base = devm_platform_ioremap_resource(pdev, 0); in mxs_dcp_probe()
996 if (IS_ERR(sdcp->base)) in mxs_dcp_probe()
997 return PTR_ERR(sdcp->base); in mxs_dcp_probe()
1001 "dcp-vmi-irq", sdcp); in mxs_dcp_probe()
1008 "dcp-irq", sdcp); in mxs_dcp_probe()
1015 sdcp->coh = devm_kzalloc(dev, sizeof(*sdcp->coh) + DCP_ALIGNMENT, in mxs_dcp_probe()
1017 if (!sdcp->coh) in mxs_dcp_probe()
1021 sdcp->coh = PTR_ALIGN(sdcp->coh, DCP_ALIGNMENT); in mxs_dcp_probe()
1024 sdcp->dcp_clk = devm_clk_get(dev, "dcp"); in mxs_dcp_probe()
1025 if (IS_ERR(sdcp->dcp_clk)) { in mxs_dcp_probe()
1026 if (sdcp->dcp_clk != ERR_PTR(-ENOENT)) in mxs_dcp_probe()
1027 return PTR_ERR(sdcp->dcp_clk); in mxs_dcp_probe()
1028 sdcp->dcp_clk = NULL; in mxs_dcp_probe()
1030 ret = clk_prepare_enable(sdcp->dcp_clk); in mxs_dcp_probe()
1035 ret = stmp_reset_block(sdcp->base); in mxs_dcp_probe()
1044 sdcp->base + MXS_DCP_CTRL); in mxs_dcp_probe()
1048 sdcp->base + MXS_DCP_CHANNELCTRL); in mxs_dcp_probe()
1057 writel(0xffff0000, sdcp->base + MXS_DCP_CONTEXT); in mxs_dcp_probe()
1059 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(i)); in mxs_dcp_probe()
1060 writel(0xffffffff, sdcp->base + MXS_DCP_STAT_CLR); in mxs_dcp_probe()
1062 global_sdcp = sdcp; in mxs_dcp_probe()
1064 platform_set_drvdata(pdev, sdcp); in mxs_dcp_probe()
1067 spin_lock_init(&sdcp->lock[i]); in mxs_dcp_probe()
1068 init_completion(&sdcp->completion[i]); in mxs_dcp_probe()
1069 crypto_init_queue(&sdcp->queue[i], 50); in mxs_dcp_probe()
1073 sdcp->thread[DCP_CHAN_HASH_SHA] = kthread_run(dcp_chan_thread_sha, in mxs_dcp_probe()
1075 if (IS_ERR(sdcp->thread[DCP_CHAN_HASH_SHA])) { in mxs_dcp_probe()
1077 ret = PTR_ERR(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_probe()
1081 sdcp->thread[DCP_CHAN_CRYPTO] = kthread_run(dcp_chan_thread_aes, in mxs_dcp_probe()
1083 if (IS_ERR(sdcp->thread[DCP_CHAN_CRYPTO])) { in mxs_dcp_probe()
1085 ret = PTR_ERR(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_probe()
1090 sdcp->caps = readl(sdcp->base + MXS_DCP_CAPABILITY1); in mxs_dcp_probe()
1092 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) { in mxs_dcp_probe()
1102 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) { in mxs_dcp_probe()
1111 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) { in mxs_dcp_probe()
1123 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) in mxs_dcp_probe()
1127 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) in mxs_dcp_probe()
1131 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_probe()
1134 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_probe()
1137 clk_disable_unprepare(sdcp->dcp_clk); in mxs_dcp_probe()
1144 struct dcp *sdcp = platform_get_drvdata(pdev); in mxs_dcp_remove() local
1146 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) in mxs_dcp_remove()
1149 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) in mxs_dcp_remove()
1152 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) in mxs_dcp_remove()
1155 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); in mxs_dcp_remove()
1156 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); in mxs_dcp_remove()
1158 clk_disable_unprepare(sdcp->dcp_clk); in mxs_dcp_remove()