Commit 6882fb9e34ede75949dc693f7bb0fd6eddbbcf2e
1 parent
9a5549de33
Exists in
v3.2_SMARCT335xPSP_04.06.00.11
and in
2 other branches
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 |