Commit 6882fb9e34ede75949dc693f7bb0fd6eddbbcf2e

Authored by Eric Lee
1 parent 9a5549de33

Add 0006-crypto-omap4-aes-User-finer-grained-PM-management.patch that wasn't par…

…t of the official PSP 04.06.00.11 release

Showing 1 changed file with 16 additions and 23 deletions Side-by-side Diff

drivers/crypto/omap4-aes.c
... ... @@ -80,7 +80,6 @@
80 80 struct list_head list;
81 81 unsigned long phys_base;
82 82 void __iomem *io_base;
83   - struct clk *iclk;
84 83 struct omap4_aes_ctx *ctx;
85 84 struct device *dev;
86 85 unsigned long flags;
... ... @@ -146,7 +145,7 @@
146 145  
147 146 static int omap4_aes_hw_init(struct omap4_aes_dev *dd)
148 147 {
149   - omap4_aes_write(dd, AES_REG_SYSCFG, 0);
  148 + pm_runtime_get_sync(dd->dev);
150 149  
151 150 if (!(dd->flags & FLAGS_INIT)) {
152 151 dd->flags |= FLAGS_INIT;
153 152  
... ... @@ -489,11 +488,17 @@
489 488  
490 489 pr_debug("err: %d\n", err);
491 490  
  491 + pm_runtime_put_sync(dd->dev);
492 492 dd->flags &= ~FLAGS_BUSY;
493 493  
494 494 req->base.complete(&req->base, err);
495 495 }
496 496  
  497 +static void omap4_aes_dma_stop(struct omap4_aes_dev *dd)
  498 +{
  499 + omap4_aes_write_mask(dd, AES_REG_SYSCFG, 0, AES_REG_SYSCFG_DREQ_MASK);
  500 +}
  501 +
497 502 static int omap4_aes_crypt_dma_stop(struct omap4_aes_dev *dd)
498 503 {
499 504 int err = 0;
... ... @@ -501,7 +506,7 @@
501 506  
502 507 pr_debug("total: %d\n", dd->total);
503 508  
504   - omap4_aes_write_mask(dd, AES_REG_SYSCFG, 0, AES_REG_SYSCFG_DREQ_MASK);
  509 + omap4_aes_dma_stop(dd);
505 510  
506 511 edma_stop(dd->dma_lch_in);
507 512 edma_clean_channel(dd->dma_lch_in);
508 513  
509 514  
510 515  
... ... @@ -819,21 +824,22 @@
819 824 else
820 825 dd->dma_in = res->start;
821 826  
822   - pm_runtime_enable(dev);
823   - udelay(1);
824   - pm_runtime_get_sync(dev);
825   - udelay(1);
826   -
827 827 dd->io_base = ioremap(dd->phys_base, SZ_4K);
828 828 if (!dd->io_base) {
829 829 dev_err(dev, "can't ioremap\n");
830 830 err = -ENOMEM;
831   - goto err_io;
  831 + goto err_data;
832 832 }
833 833  
834   - omap4_aes_hw_init(dd);
  834 + pm_runtime_enable(dev);
  835 + pm_runtime_get_sync(dev);
  836 +
  837 + omap4_aes_dma_stop(dd);
  838 +
835 839 reg = omap4_aes_read(dd, AES_REG_REV);
836 840  
  841 + pm_runtime_put_sync(dev);
  842 +
837 843 dev_info(dev, "AM33X AES hw accel rev: %u.%02u\n",
838 844 ((reg & AES_REG_REV_X_MAJOR_MASK) >> 8),
839 845 (reg & AES_REG_REV_Y_MINOR_MASK));
840 846  
841 847  
... ... @@ -870,17 +876,8 @@
870 876 tasklet_kill(&dd->done_task);
871 877 tasklet_kill(&dd->queue_task);
872 878 iounmap(dd->io_base);
873   -
874   -err_io:
875   - pm_runtime_put_sync(dev);
876   - udelay(1);
877 879 pm_runtime_disable(dev);
878   - udelay(1);
879 880  
880   -
881   -//err_res:
882   - //kfree(dd);
883   - //dd = NULL;
884 881 err_data:
885 882 dev_err(dev, "initialization failed.\n");
886 883 return err;
887 884  
... ... @@ -905,11 +902,7 @@
905 902 tasklet_kill(&dd->queue_task);
906 903 omap4_aes_dma_cleanup(dd);
907 904 iounmap(dd->io_base);
908   - pm_runtime_put_sync(&pdev->dev);
909   - udelay(1);
910 905 pm_runtime_disable(&pdev->dev);
911   - udelay(1);
912   -
913 906 kfree(dd);
914 907 dd = NULL;
915 908