H A D | mxs-dcp.c | 153 struct dcp *sdcp = global_sdcp; mxs_dcp_start_dma() local 157 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; mxs_dcp_start_dma() 159 dma_addr_t desc_phys = dma_map_single(sdcp->dev, desc, sizeof(*desc), mxs_dcp_start_dma() 162 reinit_completion(&sdcp->completion[chan]); mxs_dcp_start_dma() 165 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(chan)); mxs_dcp_start_dma() 168 writel(desc_phys, sdcp->base + MXS_DCP_CH_N_CMDPTR(chan)); mxs_dcp_start_dma() 171 writel(1, sdcp->base + MXS_DCP_CH_N_SEMA(chan)); mxs_dcp_start_dma() 173 ret = wait_for_completion_timeout(&sdcp->completion[chan], mxs_dcp_start_dma() 176 dev_err(sdcp->dev, "Channel %i timeout (DCP_STAT=0x%08x)\n", mxs_dcp_start_dma() 177 chan, readl(sdcp->base + MXS_DCP_STAT)); mxs_dcp_start_dma() 181 stat = readl(sdcp->base + MXS_DCP_CH_N_STAT(chan)); mxs_dcp_start_dma() 183 dev_err(sdcp->dev, "Channel %i error (CH_STAT=0x%08x)\n", mxs_dcp_start_dma() 188 dma_unmap_single(sdcp->dev, desc_phys, sizeof(*desc), DMA_TO_DEVICE); mxs_dcp_start_dma() 199 struct dcp *sdcp = global_sdcp; mxs_dcp_run_aes() local 200 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; mxs_dcp_run_aes() 204 dma_addr_t key_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_key, mxs_dcp_run_aes() 207 dma_addr_t src_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_in_buf, mxs_dcp_run_aes() 209 dma_addr_t dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, mxs_dcp_run_aes() 241 dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128, mxs_dcp_run_aes() 243 dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); mxs_dcp_run_aes() 244 dma_unmap_single(sdcp->dev, dst_phys, DCP_BUF_SZ, DMA_FROM_DEVICE); mxs_dcp_run_aes() 251 struct dcp *sdcp = global_sdcp; mxs_dcp_aes_block_crypt() local 262 uint8_t *in_buf = sdcp->coh->aes_in_buf; mxs_dcp_aes_block_crypt() 263 uint8_t *out_buf = sdcp->coh->aes_out_buf; mxs_dcp_aes_block_crypt() 268 uint8_t *key = sdcp->coh->aes_key; mxs_dcp_aes_block_crypt() 344 struct dcp *sdcp = global_sdcp; dcp_chan_thread_aes() local 355 mutex_lock(&sdcp->mutex[chan]); dcp_chan_thread_aes() 356 backlog = crypto_get_backlog(&sdcp->queue[chan]); dcp_chan_thread_aes() 357 arq = crypto_dequeue_request(&sdcp->queue[chan]); dcp_chan_thread_aes() 358 mutex_unlock(&sdcp->mutex[chan]); dcp_chan_thread_aes() 397 struct dcp *sdcp = global_sdcp; mxs_dcp_aes_enqueue() local 410 mutex_lock(&sdcp->mutex[actx->chan]); mxs_dcp_aes_enqueue() 411 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); mxs_dcp_aes_enqueue() 412 mutex_unlock(&sdcp->mutex[actx->chan]); mxs_dcp_aes_enqueue() 414 wake_up_process(sdcp->thread[actx->chan]); mxs_dcp_aes_enqueue() 511 struct dcp *sdcp = global_sdcp; mxs_dcp_run_sha() local 519 struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; mxs_dcp_run_sha() 522 dma_addr_t buf_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_in_buf, mxs_dcp_run_sha() 542 digest_phys = dma_map_single(sdcp->dev, req->result, mxs_dcp_run_sha() 551 dma_unmap_single(sdcp->dev, digest_phys, halg->digestsize, mxs_dcp_run_sha() 554 dma_unmap_single(sdcp->dev, buf_phys, DCP_BUF_SZ, DMA_TO_DEVICE); mxs_dcp_run_sha() 561 struct dcp *sdcp = global_sdcp; dcp_sha_req_to_buf() local 570 uint8_t *in_buf = sdcp->coh->sha_in_buf; dcp_sha_req_to_buf() 637 struct dcp *sdcp = global_sdcp; dcp_chan_thread_sha() local 651 mutex_lock(&sdcp->mutex[chan]); dcp_chan_thread_sha() 652 backlog = crypto_get_backlog(&sdcp->queue[chan]); dcp_chan_thread_sha() 653 arq = crypto_dequeue_request(&sdcp->queue[chan]); dcp_chan_thread_sha() 654 mutex_unlock(&sdcp->mutex[chan]); dcp_chan_thread_sha() 705 struct dcp *sdcp = global_sdcp; dcp_sha_update_fx() local 729 mutex_lock(&sdcp->mutex[actx->chan]); dcp_sha_update_fx() 730 ret = crypto_enqueue_request(&sdcp->queue[actx->chan], &req->base); dcp_sha_update_fx() 731 mutex_unlock(&sdcp->mutex[actx->chan]); dcp_sha_update_fx() 733 wake_up_process(sdcp->thread[actx->chan]); dcp_sha_update_fx() 880 struct dcp *sdcp = context; mxs_dcp_irq() local 884 stat = readl(sdcp->base + MXS_DCP_STAT); mxs_dcp_irq() 890 writel(stat, sdcp->base + MXS_DCP_STAT_CLR); mxs_dcp_irq() 895 complete(&sdcp->completion[i]); mxs_dcp_irq() 903 struct dcp *sdcp = NULL; mxs_dcp_probe() local 923 sdcp = devm_kzalloc(dev, sizeof(*sdcp), GFP_KERNEL); mxs_dcp_probe() 924 if (!sdcp) mxs_dcp_probe() 927 sdcp->dev = dev; mxs_dcp_probe() 928 sdcp->base = devm_ioremap_resource(dev, iores); mxs_dcp_probe() 929 if (IS_ERR(sdcp->base)) mxs_dcp_probe() 930 return PTR_ERR(sdcp->base); mxs_dcp_probe() 934 "dcp-vmi-irq", sdcp); mxs_dcp_probe() 941 "dcp-irq", sdcp); mxs_dcp_probe() 948 sdcp->coh = devm_kzalloc(dev, sizeof(*sdcp->coh) + DCP_ALIGNMENT, mxs_dcp_probe() 950 if (!sdcp->coh) mxs_dcp_probe() 954 sdcp->coh = PTR_ALIGN(sdcp->coh, DCP_ALIGNMENT); mxs_dcp_probe() 957 ret = stmp_reset_block(sdcp->base); mxs_dcp_probe() 964 sdcp->base + MXS_DCP_CTRL); mxs_dcp_probe() 968 sdcp->base + MXS_DCP_CHANNELCTRL); mxs_dcp_probe() 977 writel(0xffff0000, sdcp->base + MXS_DCP_CONTEXT); mxs_dcp_probe() 979 writel(0xffffffff, sdcp->base + MXS_DCP_CH_N_STAT_CLR(i)); mxs_dcp_probe() 980 writel(0xffffffff, sdcp->base + MXS_DCP_STAT_CLR); mxs_dcp_probe() 982 global_sdcp = sdcp; mxs_dcp_probe() 984 platform_set_drvdata(pdev, sdcp); mxs_dcp_probe() 987 mutex_init(&sdcp->mutex[i]); mxs_dcp_probe() 988 init_completion(&sdcp->completion[i]); mxs_dcp_probe() 989 crypto_init_queue(&sdcp->queue[i], 50); mxs_dcp_probe() 993 sdcp->thread[DCP_CHAN_HASH_SHA] = kthread_run(dcp_chan_thread_sha, mxs_dcp_probe() 995 if (IS_ERR(sdcp->thread[DCP_CHAN_HASH_SHA])) { mxs_dcp_probe() 997 return PTR_ERR(sdcp->thread[DCP_CHAN_HASH_SHA]); mxs_dcp_probe() 1000 sdcp->thread[DCP_CHAN_CRYPTO] = kthread_run(dcp_chan_thread_aes, mxs_dcp_probe() 1002 if (IS_ERR(sdcp->thread[DCP_CHAN_CRYPTO])) { mxs_dcp_probe() 1004 ret = PTR_ERR(sdcp->thread[DCP_CHAN_CRYPTO]); mxs_dcp_probe() 1009 sdcp->caps = readl(sdcp->base + MXS_DCP_CAPABILITY1); mxs_dcp_probe() 1011 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) { mxs_dcp_probe() 1021 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) { mxs_dcp_probe() 1030 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) { mxs_dcp_probe() 1042 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) mxs_dcp_probe() 1046 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) mxs_dcp_probe() 1050 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); mxs_dcp_probe() 1053 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); mxs_dcp_probe() 1059 struct dcp *sdcp = platform_get_drvdata(pdev); mxs_dcp_remove() local 1061 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA256) mxs_dcp_remove() 1064 if (sdcp->caps & MXS_DCP_CAPABILITY1_SHA1) mxs_dcp_remove() 1067 if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) mxs_dcp_remove() 1070 kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); mxs_dcp_remove() 1071 kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); mxs_dcp_remove()
|