diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2019-08-20 16:23:47 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-08-30 04:05:28 -0400 |
commit | 70c0cda27a10df44e81887bc4cb10f587236a941 (patch) | |
tree | d6897ec7b9c8624a4f134d70f82cae8bd95c4475 /drivers/crypto | |
parent | 671e50384ee6267052c5d613dc84a72b7fe9ef4b (diff) |
crypto: caam - move DMA mask selection into a function
Exactly the same code to figure out DMA mask is repeated twice in the
driver code. To avoid repetition, move that logic into a standalone
subroutine in intern.h. While at it re-shuffle the code to make it
more readable with early returns.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>
Cc: Chris Spencer <christopher.spencer@sea.co.uk>
Cc: Cory Tusar <cory.tusar@zii.aero>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Horia Geantă <horia.geanta@nxp.com>
Cc: Aymen Sghaier <aymen.sghaier@nxp.com>
Cc: Leonard Crestez <leonard.crestez@nxp.com>
Cc: linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r-- | drivers/crypto/caam/ctrl.c | 11 | ||||
-rw-r--r-- | drivers/crypto/caam/intern.h | 20 | ||||
-rw-r--r-- | drivers/crypto/caam/jr.c | 15 |
3 files changed, 22 insertions, 24 deletions
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c index e0590beae240..50336494f285 100644 --- a/drivers/crypto/caam/ctrl.c +++ b/drivers/crypto/caam/ctrl.c | |||
@@ -711,16 +711,7 @@ static int caam_probe(struct platform_device *pdev) | |||
711 | JRSTART_JR1_START | JRSTART_JR2_START | | 711 | JRSTART_JR1_START | JRSTART_JR2_START | |
712 | JRSTART_JR3_START); | 712 | JRSTART_JR3_START); |
713 | 713 | ||
714 | if (sizeof(dma_addr_t) == sizeof(u64)) { | 714 | ret = dma_set_mask_and_coherent(dev, caam_get_dma_mask(dev)); |
715 | if (caam_dpaa2) | ||
716 | ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(49)); | ||
717 | else if (of_device_is_compatible(nprop, "fsl,sec-v5.0")) | ||
718 | ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40)); | ||
719 | else | ||
720 | ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(36)); | ||
721 | } else { | ||
722 | ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32)); | ||
723 | } | ||
724 | if (ret) { | 715 | if (ret) { |
725 | dev_err(dev, "dma_set_mask_and_coherent failed (%d)\n", ret); | 716 | dev_err(dev, "dma_set_mask_and_coherent failed (%d)\n", ret); |
726 | goto disable_caam_emi_slow; | 717 | goto disable_caam_emi_slow; |
diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h index 6af84bbc612c..ec25d260fa40 100644 --- a/drivers/crypto/caam/intern.h +++ b/drivers/crypto/caam/intern.h | |||
@@ -10,6 +10,8 @@ | |||
10 | #ifndef INTERN_H | 10 | #ifndef INTERN_H |
11 | #define INTERN_H | 11 | #define INTERN_H |
12 | 12 | ||
13 | #include "ctrl.h" | ||
14 | |||
13 | /* Currently comes from Kconfig param as a ^2 (driver-required) */ | 15 | /* Currently comes from Kconfig param as a ^2 (driver-required) */ |
14 | #define JOBR_DEPTH (1 << CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE) | 16 | #define JOBR_DEPTH (1 << CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE) |
15 | 17 | ||
@@ -215,4 +217,22 @@ DEFINE_SIMPLE_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n"); | |||
215 | DEFINE_SIMPLE_ATTRIBUTE(caam_fops_u64_ro, caam_debugfs_u64_get, NULL, "%llu\n"); | 217 | DEFINE_SIMPLE_ATTRIBUTE(caam_fops_u64_ro, caam_debugfs_u64_get, NULL, "%llu\n"); |
216 | #endif | 218 | #endif |
217 | 219 | ||
220 | static inline u64 caam_get_dma_mask(struct device *dev) | ||
221 | { | ||
222 | struct device_node *nprop = dev->of_node; | ||
223 | |||
224 | if (sizeof(dma_addr_t) != sizeof(u64)) | ||
225 | return DMA_BIT_MASK(32); | ||
226 | |||
227 | if (caam_dpaa2) | ||
228 | return DMA_BIT_MASK(49); | ||
229 | |||
230 | if (of_device_is_compatible(nprop, "fsl,sec-v5.0-job-ring") || | ||
231 | of_device_is_compatible(nprop, "fsl,sec-v5.0")) | ||
232 | return DMA_BIT_MASK(40); | ||
233 | |||
234 | return DMA_BIT_MASK(36); | ||
235 | } | ||
236 | |||
237 | |||
218 | #endif /* INTERN_H */ | 238 | #endif /* INTERN_H */ |
diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c index cea811fed320..4b25b2fa3d02 100644 --- a/drivers/crypto/caam/jr.c +++ b/drivers/crypto/caam/jr.c | |||
@@ -543,20 +543,7 @@ static int caam_jr_probe(struct platform_device *pdev) | |||
543 | 543 | ||
544 | jrpriv->rregs = (struct caam_job_ring __iomem __force *)ctrl; | 544 | jrpriv->rregs = (struct caam_job_ring __iomem __force *)ctrl; |
545 | 545 | ||
546 | if (sizeof(dma_addr_t) == sizeof(u64)) { | 546 | error = dma_set_mask_and_coherent(jrdev, caam_get_dma_mask(jrdev)); |
547 | if (caam_dpaa2) | ||
548 | error = dma_set_mask_and_coherent(jrdev, | ||
549 | DMA_BIT_MASK(49)); | ||
550 | else if (of_device_is_compatible(nprop, | ||
551 | "fsl,sec-v5.0-job-ring")) | ||
552 | error = dma_set_mask_and_coherent(jrdev, | ||
553 | DMA_BIT_MASK(40)); | ||
554 | else | ||
555 | error = dma_set_mask_and_coherent(jrdev, | ||
556 | DMA_BIT_MASK(36)); | ||
557 | } else { | ||
558 | error = dma_set_mask_and_coherent(jrdev, DMA_BIT_MASK(32)); | ||
559 | } | ||
560 | if (error) { | 547 | if (error) { |
561 | dev_err(jrdev, "dma_set_mask_and_coherent failed (%d)\n", | 548 | dev_err(jrdev, "dma_set_mask_and_coherent failed (%d)\n", |
562 | error); | 549 | error); |