From 810dda006801e4c749504b2e26126e4bd3dc7664 Mon Sep 17 00:00:00 2001 From: Aymen Sghaier Date: Thu, 13 Sep 2018 18:19:13 +0200 Subject: [PATCH] MLK-19053: crypto: caam: RNG4 TRNG errata The TRNG as used in RNG4, used in CAAM has a documentation issue. The effect is that it is possible that the entropy used to instantiate the DRBG may be old entropy, rather than newly generated entropy. There is proper programming guidance, but it is not in the documentation. Signed-off-by: Aymen Sghaier (cherry picked from commit 2aff5ffb2c4bb19106f3faa76415b51591cbc2b2) (cherry picked from commit 051a93febddac7e6fac557b0409203cfefb45b65) (cherry picked from commit 68cea9fd1df97f2dd48dae0c891325a444458f94) --- drivers/crypto/fsl_caam.c | 11 ++++++++--- drivers/crypto/fsl_caam_internal.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/fsl_caam.c b/drivers/crypto/fsl_caam.c index 2827c481f0..f94c93dea4 100644 --- a/drivers/crypto/fsl_caam.c +++ b/drivers/crypto/fsl_caam.c @@ -345,7 +345,12 @@ static void kick_trng(u32 ent_delay) u32 val; /* Put RNG in program mode */ - setbits_le32(CAAM_RTMCTL, RTMCTL_PGM); + /* Setting both RTMCTL:PRGM and RTMCTL:TRNG_ACC causes TRNG to + * properly invalidate the entropy in the entropy register and + * force re-generation. + */ + setbits_le32(CAAM_RTMCTL, RTMCTL_PGM | RTMCTL_ACC); + /* Configure the RNG Entropy Delay * Performance-wise, it does not make sense to * set the delay to a value that is lower @@ -359,7 +364,7 @@ static void kick_trng(u32 ent_delay) val >>= BS_TRNG_ENT_DLY; if (ent_delay < val) { /* Put RNG4 into run mode */ - clrbits_le32(CAAM_RTMCTL, RTMCTL_PGM); + clrbits_le32(CAAM_RTMCTL, RTMCTL_PGM | RTMCTL_ACC); return; } @@ -391,7 +396,7 @@ static void kick_trng(u32 ent_delay) val &= ~BM_TRNG_SAMP_MODE; val |= TRNG_SAMP_MODE_RAW_ES_SC; /* Put RNG4 into run mode */ - val &= ~RTMCTL_PGM; + val &= ~(RTMCTL_PGM | RTMCTL_ACC); /*test with sample mode only */ __raw_writel(val, CAAM_RTMCTL); diff --git a/drivers/crypto/fsl_caam_internal.h b/drivers/crypto/fsl_caam_internal.h index 852672d1cb..36885da904 100644 --- a/drivers/crypto/fsl_caam_internal.h +++ b/drivers/crypto/fsl_caam_internal.h @@ -147,6 +147,7 @@ #define RTMCTL_PGM BIT(16) #define RTMCTL_ERR BIT(12) #define RTMCTL_RST BIT(6) +#define RTMCTL_ACC BIT(5) #define RDSTA_IF0 (1) #define RDSTA_IF1 (2) #define RDSTA_SKVN BIT(30) -- 2.17.1