diff options
Diffstat (limited to 'drivers/crypto/dcp.c')
| -rw-r--r-- | drivers/crypto/dcp.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/drivers/crypto/dcp.c b/drivers/crypto/dcp.c index a8a7dd4b0d25..247ab8048f5b 100644 --- a/drivers/crypto/dcp.c +++ b/drivers/crypto/dcp.c | |||
| @@ -733,12 +733,9 @@ static int dcp_probe(struct platform_device *pdev) | |||
| 733 | platform_set_drvdata(pdev, dev); | 733 | platform_set_drvdata(pdev, dev); |
| 734 | 734 | ||
| 735 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 735 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 736 | if (!r) { | 736 | dev->dcp_regs_base = devm_ioremap_resource(&pdev->dev, r); |
| 737 | dev_err(&pdev->dev, "failed to get IORESOURCE_MEM\n"); | 737 | if (IS_ERR(dev->dcp_regs_base)) |
| 738 | return -ENXIO; | 738 | return PTR_ERR(dev->dcp_regs_base); |
| 739 | } | ||
| 740 | dev->dcp_regs_base = devm_ioremap(&pdev->dev, r->start, | ||
| 741 | resource_size(r)); | ||
| 742 | 739 | ||
| 743 | dcp_set(dev, DCP_CTRL_SFRST, DCP_REG_CTRL); | 740 | dcp_set(dev, DCP_CTRL_SFRST, DCP_REG_CTRL); |
| 744 | udelay(10); | 741 | udelay(10); |
| @@ -762,7 +759,8 @@ static int dcp_probe(struct platform_device *pdev) | |||
| 762 | return -EIO; | 759 | return -EIO; |
| 763 | } | 760 | } |
| 764 | dev->dcp_vmi_irq = r->start; | 761 | dev->dcp_vmi_irq = r->start; |
| 765 | ret = request_irq(dev->dcp_vmi_irq, dcp_vmi_irq, 0, "dcp", dev); | 762 | ret = devm_request_irq(&pdev->dev, dev->dcp_vmi_irq, dcp_vmi_irq, 0, |
| 763 | "dcp", dev); | ||
| 766 | if (ret != 0) { | 764 | if (ret != 0) { |
| 767 | dev_err(&pdev->dev, "can't request_irq (0)\n"); | 765 | dev_err(&pdev->dev, "can't request_irq (0)\n"); |
| 768 | return -EIO; | 766 | return -EIO; |
| @@ -771,15 +769,14 @@ static int dcp_probe(struct platform_device *pdev) | |||
| 771 | r = platform_get_resource(pdev, IORESOURCE_IRQ, 1); | 769 | r = platform_get_resource(pdev, IORESOURCE_IRQ, 1); |
| 772 | if (!r) { | 770 | if (!r) { |
| 773 | dev_err(&pdev->dev, "can't get IRQ resource (1)\n"); | 771 | dev_err(&pdev->dev, "can't get IRQ resource (1)\n"); |
| 774 | ret = -EIO; | 772 | return -EIO; |
| 775 | goto err_free_irq0; | ||
| 776 | } | 773 | } |
| 777 | dev->dcp_irq = r->start; | 774 | dev->dcp_irq = r->start; |
| 778 | ret = request_irq(dev->dcp_irq, dcp_irq, 0, "dcp", dev); | 775 | ret = devm_request_irq(&pdev->dev, dev->dcp_irq, dcp_irq, 0, "dcp", |
| 776 | dev); | ||
| 779 | if (ret != 0) { | 777 | if (ret != 0) { |
| 780 | dev_err(&pdev->dev, "can't request_irq (1)\n"); | 778 | dev_err(&pdev->dev, "can't request_irq (1)\n"); |
| 781 | ret = -EIO; | 779 | return -EIO; |
| 782 | goto err_free_irq0; | ||
| 783 | } | 780 | } |
| 784 | 781 | ||
| 785 | dev->hw_pkg[0] = dma_alloc_coherent(&pdev->dev, | 782 | dev->hw_pkg[0] = dma_alloc_coherent(&pdev->dev, |
| @@ -788,8 +785,7 @@ static int dcp_probe(struct platform_device *pdev) | |||
| 788 | GFP_KERNEL); | 785 | GFP_KERNEL); |
| 789 | if (!dev->hw_pkg[0]) { | 786 | if (!dev->hw_pkg[0]) { |
| 790 | dev_err(&pdev->dev, "Could not allocate hw descriptors\n"); | 787 | dev_err(&pdev->dev, "Could not allocate hw descriptors\n"); |
| 791 | ret = -ENOMEM; | 788 | return -ENOMEM; |
| 792 | goto err_free_irq1; | ||
| 793 | } | 789 | } |
| 794 | 790 | ||
| 795 | for (i = 1; i < DCP_MAX_PKG; i++) { | 791 | for (i = 1; i < DCP_MAX_PKG; i++) { |
| @@ -848,16 +844,14 @@ err_unregister: | |||
| 848 | for (j = 0; j < i; j++) | 844 | for (j = 0; j < i; j++) |
| 849 | crypto_unregister_alg(&algs[j]); | 845 | crypto_unregister_alg(&algs[j]); |
| 850 | err_free_key_iv: | 846 | err_free_key_iv: |
| 847 | tasklet_kill(&dev->done_task); | ||
| 848 | tasklet_kill(&dev->queue_task); | ||
| 851 | dma_free_coherent(&pdev->dev, 2 * AES_KEYSIZE_128, dev->payload_base, | 849 | dma_free_coherent(&pdev->dev, 2 * AES_KEYSIZE_128, dev->payload_base, |
| 852 | dev->payload_base_dma); | 850 | dev->payload_base_dma); |
| 853 | err_free_hw_packet: | 851 | err_free_hw_packet: |
| 854 | dma_free_coherent(&pdev->dev, DCP_MAX_PKG * | 852 | dma_free_coherent(&pdev->dev, DCP_MAX_PKG * |
| 855 | sizeof(struct dcp_hw_packet), dev->hw_pkg[0], | 853 | sizeof(struct dcp_hw_packet), dev->hw_pkg[0], |
| 856 | dev->hw_phys_pkg); | 854 | dev->hw_phys_pkg); |
| 857 | err_free_irq1: | ||
| 858 | free_irq(dev->dcp_irq, dev); | ||
| 859 | err_free_irq0: | ||
| 860 | free_irq(dev->dcp_vmi_irq, dev); | ||
| 861 | 855 | ||
| 862 | return ret; | 856 | return ret; |
| 863 | } | 857 | } |
| @@ -868,23 +862,20 @@ static int dcp_remove(struct platform_device *pdev) | |||
| 868 | int j; | 862 | int j; |
| 869 | dev = platform_get_drvdata(pdev); | 863 | dev = platform_get_drvdata(pdev); |
| 870 | 864 | ||
| 871 | dma_free_coherent(&pdev->dev, | 865 | misc_deregister(&dev->dcp_bootstream_misc); |
| 872 | DCP_MAX_PKG * sizeof(struct dcp_hw_packet), | ||
| 873 | dev->hw_pkg[0], dev->hw_phys_pkg); | ||
| 874 | |||
| 875 | dma_free_coherent(&pdev->dev, 2 * AES_KEYSIZE_128, dev->payload_base, | ||
| 876 | dev->payload_base_dma); | ||
| 877 | 866 | ||
| 878 | free_irq(dev->dcp_irq, dev); | 867 | for (j = 0; j < ARRAY_SIZE(algs); j++) |
| 879 | free_irq(dev->dcp_vmi_irq, dev); | 868 | crypto_unregister_alg(&algs[j]); |
| 880 | 869 | ||
| 881 | tasklet_kill(&dev->done_task); | 870 | tasklet_kill(&dev->done_task); |
| 882 | tasklet_kill(&dev->queue_task); | 871 | tasklet_kill(&dev->queue_task); |
| 883 | 872 | ||
| 884 | for (j = 0; j < ARRAY_SIZE(algs); j++) | 873 | dma_free_coherent(&pdev->dev, 2 * AES_KEYSIZE_128, dev->payload_base, |
| 885 | crypto_unregister_alg(&algs[j]); | 874 | dev->payload_base_dma); |
| 886 | 875 | ||
| 887 | misc_deregister(&dev->dcp_bootstream_misc); | 876 | dma_free_coherent(&pdev->dev, |
| 877 | DCP_MAX_PKG * sizeof(struct dcp_hw_packet), | ||
| 878 | dev->hw_pkg[0], dev->hw_phys_pkg); | ||
| 888 | 879 | ||
| 889 | return 0; | 880 | return 0; |
| 890 | } | 881 | } |
