tty: Remove tty_wait_until_sent_from_close()
[firefly-linux-kernel-4.4.55.git] / drivers / crypto / atmel-aes.c
index 6597aac9905d1d7aae890b952f30f4cb7aad6e70..0f9a9dc06a830f4eb5f9669ba26df7c2f0a95077 100644 (file)
@@ -315,10 +315,10 @@ static int atmel_aes_crypt_dma(struct atmel_aes_dev *dd,
 
        dd->dma_size = length;
 
-       if (!(dd->flags & AES_FLAGS_FAST)) {
-               dma_sync_single_for_device(dd->dev, dma_addr_in, length,
-                                          DMA_TO_DEVICE);
-       }
+       dma_sync_single_for_device(dd->dev, dma_addr_in, length,
+                                  DMA_TO_DEVICE);
+       dma_sync_single_for_device(dd->dev, dma_addr_out, length,
+                                  DMA_FROM_DEVICE);
 
        if (dd->flags & AES_FLAGS_CFB8) {
                dd->dma_lch_in.dma_conf.dst_addr_width =
@@ -391,6 +391,11 @@ static int atmel_aes_crypt_cpu_start(struct atmel_aes_dev *dd)
 {
        dd->flags &= ~AES_FLAGS_DMA;
 
+       dma_sync_single_for_cpu(dd->dev, dd->dma_addr_in,
+                               dd->dma_size, DMA_TO_DEVICE);
+       dma_sync_single_for_cpu(dd->dev, dd->dma_addr_out,
+                               dd->dma_size, DMA_FROM_DEVICE);
+
        /* use cache buffers */
        dd->nb_in_sg = atmel_aes_sg_length(dd->req, dd->in_sg);
        if (!dd->nb_in_sg)
@@ -459,6 +464,9 @@ static int atmel_aes_crypt_dma_start(struct atmel_aes_dev *dd)
                dd->flags |= AES_FLAGS_FAST;
 
        } else {
+               dma_sync_single_for_cpu(dd->dev, dd->dma_addr_in,
+                                       dd->dma_size, DMA_TO_DEVICE);
+
                /* use cache buffers */
                count = atmel_aes_sg_copy(&dd->in_sg, &dd->in_offset,
                                dd->buf_in, dd->buflen, dd->total, 0);
@@ -619,7 +627,7 @@ static int atmel_aes_crypt_dma_stop(struct atmel_aes_dev *dd)
                        dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);
                        dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
                } else {
-                       dma_sync_single_for_device(dd->dev, dd->dma_addr_out,
+                       dma_sync_single_for_cpu(dd->dev, dd->dma_addr_out,
                                dd->dma_size, DMA_FROM_DEVICE);
 
                        /* copy data */
@@ -1246,6 +1254,11 @@ static void atmel_aes_get_cap(struct atmel_aes_dev *dd)
 
        /* keep only major version number */
        switch (dd->hw_version & 0xff0) {
+       case 0x200:
+               dd->caps.has_dualbuff = 1;
+               dd->caps.has_cfb64 = 1;
+               dd->caps.max_burst_size = 4;
+               break;
        case 0x130:
                dd->caps.has_dualbuff = 1;
                dd->caps.has_cfb64 = 1;
@@ -1336,6 +1349,7 @@ static int atmel_aes_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, aes_dd);
 
        INIT_LIST_HEAD(&aes_dd->list);
+       spin_lock_init(&aes_dd->lock);
 
        tasklet_init(&aes_dd->done_task, atmel_aes_done_task,
                                        (unsigned long)aes_dd);
@@ -1374,7 +1388,7 @@ static int atmel_aes_probe(struct platform_device *pdev)
        /* Initializing the clock */
        aes_dd->iclk = clk_get(&pdev->dev, "aes_clk");
        if (IS_ERR(aes_dd->iclk)) {
-               dev_err(dev, "clock intialization failed.\n");
+               dev_err(dev, "clock initialization failed.\n");
                err = PTR_ERR(aes_dd->iclk);
                goto clk_err;
        }