Skip to content

Commit 551ce72

Browse files
ndreysherbertx
authored andcommitted
crypto: caam - invalidate entropy register during RNG initialization
In order to make sure that we always use non-stale entropy data, change the code to invalidate entropy register during RNG initialization. Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com> Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com> [andrew.smirnov@gmail.com ported to upstream kernel, rewrote commit msg] Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Horia Geantă <horia.geanta@nxp.com> Cc: Chris Healy <cphealy@gmail.com> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Horia Geantă <horia.geanta@nxp.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Iuliana Prodan <iuliana.prodan@nxp.com> Cc: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-imx@nxp.com Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 32107e4 commit 551ce72

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

drivers/crypto/caam/ctrl.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,12 @@ static void kick_trng(struct platform_device *pdev, int ent_delay)
341341
ctrl = (struct caam_ctrl __iomem *)ctrlpriv->ctrl;
342342
r4tst = &ctrl->r4tst[0];
343343

344-
/* put RNG4 into program mode */
345-
clrsetbits_32(&r4tst->rtmctl, 0, RTMCTL_PRGM);
344+
/*
345+
* Setting both RTMCTL:PRGM and RTMCTL:TRNG_ACC causes TRNG to
346+
* properly invalidate the entropy in the entropy register and
347+
* force re-generation.
348+
*/
349+
clrsetbits_32(&r4tst->rtmctl, 0, RTMCTL_PRGM | RTMCTL_ACC);
346350

347351
/*
348352
* Performance-wise, it does not make sense to
@@ -372,7 +376,8 @@ static void kick_trng(struct platform_device *pdev, int ent_delay)
372376
* select raw sampling in both entropy shifter
373377
* and statistical checker; ; put RNG4 into run mode
374378
*/
375-
clrsetbits_32(&r4tst->rtmctl, RTMCTL_PRGM, RTMCTL_SAMP_MODE_RAW_ES_SC);
379+
clrsetbits_32(&r4tst->rtmctl, RTMCTL_PRGM | RTMCTL_ACC,
380+
RTMCTL_SAMP_MODE_RAW_ES_SC);
376381
}
377382

378383
static int caam_get_era_from_hw(struct caam_ctrl __iomem *ctrl)

drivers/crypto/caam/regs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,8 @@ struct rngtst {
487487

488488
/* RNG4 TRNG test registers */
489489
struct rng4tst {
490-
#define RTMCTL_PRGM 0x00010000 /* 1 -> program mode, 0 -> run mode */
490+
#define RTMCTL_ACC BIT(5) /* TRNG access mode */
491+
#define RTMCTL_PRGM BIT(16) /* 1 -> program mode, 0 -> run mode */
491492
#define RTMCTL_SAMP_MODE_VON_NEUMANN_ES_SC 0 /* use von Neumann data in
492493
both entropy shifter and
493494
statistical checker */

0 commit comments

Comments
 (0)