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 <[email protected]> Signed-off-by: Vipul Kumar <[email protected]> [[email protected] ported to upstream kernel, rewrote commit msg] Signed-off-by: Andrey Smirnov <[email protected]> Reviewed-by: Horia Geantă <[email protected]> Cc: Chris Healy <[email protected]> Cc: Lucas Stach <[email protected]> Cc: Horia Geantă <[email protected]> Cc: Herbert Xu <[email protected]> Cc: Iuliana Prodan <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Signed-off-by: Herbert Xu <[email protected]>
1 parent 32107e4 commit 551ce72

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

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)