crypto: caam - check return code of dma_set_mask_and_coherent()
authorHoria Geantă <horia.geanta@nxp.com>
Fri, 10 Feb 2017 12:07:15 +0000 (14:07 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 15 Feb 2017 05:23:37 +0000 (13:23 +0800)
Setting the dma mask could fail, thus make sure it succeeds
before going further.

Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/jr.c

index 8957ec952212a3812d3aa572dc2d83877ed8672a..f825e3765a4b664f1e6d9e6bd1cc2699de7f0942 100644 (file)
@@ -586,13 +586,18 @@ static int caam_probe(struct platform_device *pdev)
                              JRSTART_JR1_START | JRSTART_JR2_START |
                              JRSTART_JR3_START);
 
-       if (sizeof(dma_addr_t) == sizeof(u64))
+       if (sizeof(dma_addr_t) == sizeof(u64)) {
                if (of_device_is_compatible(nprop, "fsl,sec-v5.0"))
-                       dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
+                       ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
                else
-                       dma_set_mask_and_coherent(dev, DMA_BIT_MASK(36));
-       else
-               dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
+                       ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(36));
+       } else {
+               ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
+       }
+       if (ret) {
+               dev_err(dev, "dma_set_mask_and_coherent failed (%d)\n", ret);
+               goto iounmap_ctrl;
+       }
 
        /*
         * Detect and enable JobRs
index c8604dfadbf51bb3b687acbaa377296b209d2fb4..27631000b9f88bc441d8bd0a9a971df0771f6616 100644 (file)
@@ -498,13 +498,22 @@ static int caam_jr_probe(struct platform_device *pdev)
 
        jrpriv->rregs = (struct caam_job_ring __iomem __force *)ctrl;
 
-       if (sizeof(dma_addr_t) == sizeof(u64))
+       if (sizeof(dma_addr_t) == sizeof(u64)) {
                if (of_device_is_compatible(nprop, "fsl,sec-v5.0-job-ring"))
-                       dma_set_mask_and_coherent(jrdev, DMA_BIT_MASK(40));
+                       error = dma_set_mask_and_coherent(jrdev,
+                                                         DMA_BIT_MASK(40));
                else
-                       dma_set_mask_and_coherent(jrdev, DMA_BIT_MASK(36));
-       else
-               dma_set_mask_and_coherent(jrdev, DMA_BIT_MASK(32));
+                       error = dma_set_mask_and_coherent(jrdev,
+                                                         DMA_BIT_MASK(36));
+       } else {
+               error = dma_set_mask_and_coherent(jrdev, DMA_BIT_MASK(32));
+       }
+       if (error) {
+               dev_err(jrdev, "dma_set_mask_and_coherent failed (%d)\n",
+                       error);
+               iounmap(ctrl);
+               return error;
+       }
 
        /* Identify the interrupt */
        jrpriv->irq = irq_of_parse_and_map(nprop, 0);