crypto: caam - assign 40-bit masks on SEC v5.0 and above
authorKim Phillips <kim.phillips@freescale.com>
Sat, 23 Jun 2012 00:48:51 +0000 (19:48 -0500)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 27 Jun 2012 06:42:06 +0000 (14:42 +0800)
SEC v4.x were only 36-bit, SEC v5+ are 40-bit capable.
Also set a DMA mask for any job ring devices created.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/jr.c

index 77557ebcd337f71d8ec2876d4b5e6d4e017393a0..9a2db9c30630e6c2caf1de55190a9e67ec9e8264 100644 (file)
@@ -82,13 +82,18 @@ static int caam_probe(struct platform_device *pdev)
 
        /*
         * Enable DECO watchdogs and, if this is a PHYS_ADDR_T_64BIT kernel,
-        * 36-bit pointers in master configuration register
+        * long pointers in master configuration register
         */
        setbits32(&topregs->ctrl.mcr, MCFGR_WDENABLE |
                  (sizeof(dma_addr_t) == sizeof(u64) ? MCFGR_LONG_PTR : 0));
 
        if (sizeof(dma_addr_t) == sizeof(u64))
-               dma_set_mask(dev, DMA_BIT_MASK(36));
+               if (of_device_is_compatible(nprop, "fsl,sec-v5.0"))
+                       dma_set_mask(dev, DMA_BIT_MASK(40));
+               else
+                       dma_set_mask(dev, DMA_BIT_MASK(36));
+       else
+               dma_set_mask(dev, DMA_BIT_MASK(32));
 
        /*
         * Detect and enable JobRs
index 6ce4c41c86342028efec73a7eaaee63b0133eb9f..9f16b2c036135e0752ebf74d13f803b0b2129ec6 100644 (file)
@@ -503,6 +503,14 @@ int caam_jr_probe(struct platform_device *pdev, struct device_node *np,
        dev_set_drvdata(jrdev, jrpriv);
        ctrlpriv->jrdev[ring] = jrdev;
 
+       if (sizeof(dma_addr_t) == sizeof(u64))
+               if (of_device_is_compatible(np, "fsl,sec-v5.0-job-ring"))
+                       dma_set_mask(jrdev, DMA_BIT_MASK(40));
+               else
+                       dma_set_mask(jrdev, DMA_BIT_MASK(36));
+       else
+               dma_set_mask(jrdev, DMA_BIT_MASK(32));
+
        /* Identify the interrupt */
        jrpriv->irq = of_irq_to_resource(np, 0, NULL);