]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/crypto/bfin_crc.c
Merge git://git.infradead.org/users/willy/linux-nvme
[karo-tx-linux.git] / drivers / crypto / bfin_crc.c
index d797f31f5d8569386e88fb9e971f997c8ed7262d..c9ff298e6d26e8670a85affa59ea1104554be6a0 100644 (file)
@@ -139,7 +139,6 @@ static int bfin_crypto_crc_init_hw(struct bfin_crypto_crc *crc, u32 key)
        /* setup CRC interrupts */
        crc->regs->status = CMPERRI | DCNTEXPI;
        crc->regs->intrenset = CMPERRI | DCNTEXPI;
-       SSYNC();
 
        return 0;
 }
@@ -285,17 +284,12 @@ static void bfin_crypto_crc_config_dma(struct bfin_crypto_crc *crc)
        if (i == 0)
                return;
 
-       flush_dcache_range((unsigned int)crc->sg_cpu,
-                       (unsigned int)crc->sg_cpu +
-                       i * sizeof(struct dma_desc_array));
-
        /* Set the last descriptor to stop mode */
        crc->sg_cpu[i - 1].cfg &= ~(DMAFLOW | NDSIZE);
        crc->sg_cpu[i - 1].cfg |= DI_EN;
        set_dma_curr_desc_addr(crc->dma_ch, (unsigned long *)crc->sg_dma);
        set_dma_x_count(crc->dma_ch, 0);
        set_dma_x_modify(crc->dma_ch, 0);
-       SSYNC();
        set_dma_config(crc->dma_ch, dma_config);
 }
 
@@ -415,7 +409,6 @@ finish_update:
 
        /* finally kick off CRC operation */
        crc->regs->control |= BLKEN;
-       SSYNC();
 
        return -EINPROGRESS;
 }
@@ -539,7 +532,6 @@ static irqreturn_t bfin_crypto_crc_handler(int irq, void *dev_id)
 
        if (crc->regs->status & DCNTEXP) {
                crc->regs->status = DCNTEXP;
-               SSYNC();
 
                /* prepare results */
                put_unaligned_le32(crc->regs->result, crc->req->result);
@@ -594,7 +586,7 @@ static int bfin_crypto_crc_probe(struct platform_device *pdev)
        unsigned int timeout = 100000;
        int ret;
 
-       crc = kzalloc(sizeof(*crc), GFP_KERNEL);
+       crc = devm_kzalloc(dev, sizeof(*crc), GFP_KERNEL);
        if (!crc) {
                dev_err(&pdev->dev, "fail to malloc bfin_crypto_crc\n");
                return -ENOMEM;
@@ -610,42 +602,39 @@ static int bfin_crypto_crc_probe(struct platform_device *pdev)
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (res == NULL) {
                dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n");
-               ret = -ENOENT;
-               goto out_error_free_mem;
+               return -ENOENT;
        }
 
-       crc->regs = ioremap(res->start, resource_size(res));
-       if (!crc->regs) {
+       crc->regs = devm_ioremap_resource(dev, res);
+       if (IS_ERR((void *)crc->regs)) {
                dev_err(&pdev->dev, "Cannot map CRC IO\n");
-               ret = -ENXIO;
-               goto out_error_free_mem;
+               return PTR_ERR((void *)crc->regs);
        }
 
        crc->irq = platform_get_irq(pdev, 0);
        if (crc->irq < 0) {
                dev_err(&pdev->dev, "No CRC DCNTEXP IRQ specified\n");
-               ret = -ENOENT;
-               goto out_error_unmap;
+               return -ENOENT;
        }
 
-       ret = request_irq(crc->irq, bfin_crypto_crc_handler, IRQF_SHARED, dev_name(dev), crc);
+       ret = devm_request_irq(dev, crc->irq, bfin_crypto_crc_handler,
+                       IRQF_SHARED, dev_name(dev), crc);
        if (ret) {
                dev_err(&pdev->dev, "Unable to request blackfin crc irq\n");
-               goto out_error_unmap;
+               return ret;
        }
 
        res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
        if (res == NULL) {
                dev_err(&pdev->dev, "No CRC DMA channel specified\n");
-               ret = -ENOENT;
-               goto out_error_irq;
+               return -ENOENT;
        }
        crc->dma_ch = res->start;
 
        ret = request_dma(crc->dma_ch, dev_name(dev));
        if (ret) {
                dev_err(&pdev->dev, "Unable to attach Blackfin CRC DMA channel\n");
-               goto out_error_irq;
+               return ret;
        }
 
        crc->sg_cpu = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, &crc->sg_dma, GFP_KERNEL);
@@ -660,9 +649,7 @@ static int bfin_crypto_crc_probe(struct platform_device *pdev)
        crc->sg_mid_buf = (u8 *)(crc->sg_cpu + ((CRC_MAX_DMA_DESC + 1) << 1));
 
        crc->regs->control = 0;
-       SSYNC();
        crc->regs->poly = crc->poly = (u32)pdev->dev.platform_data;
-       SSYNC();
 
        while (!(crc->regs->status & LUTDONE) && (--timeout) > 0)
                cpu_relax();
@@ -693,12 +680,6 @@ out_error_dma:
        if (crc->sg_cpu)
                dma_free_coherent(&pdev->dev, PAGE_SIZE, crc->sg_cpu, crc->sg_dma);
        free_dma(crc->dma_ch);
-out_error_irq:
-       free_irq(crc->irq, crc);
-out_error_unmap:
-       iounmap((void *)crc->regs);
-out_error_free_mem:
-       kfree(crc);
 
        return ret;
 }
@@ -721,10 +702,6 @@ static int bfin_crypto_crc_remove(struct platform_device *pdev)
        crypto_unregister_ahash(&algs);
        tasklet_kill(&crc->done_task);
        free_dma(crc->dma_ch);
-       if (crc->irq > 0)
-               free_irq(crc->irq, crc);
-       iounmap((void *)crc->regs);
-       kfree(crc);
 
        return 0;
 }